Как имитировать возвращаемое значение промежуточного программного обеспечения в супертесте?

#javascript #typescript #jestjs #supertest

Вопрос:

Я пытался протестировать свой API с помощью super test , но когда я добавляю промежуточное программное обеспечение auth , я не знаю , как издеваться над промежуточным программным обеспечением, вот мой код.

authMiddleware.js

 export const authMiddleware = async (req: RequestWithUser, res: Response, next: NextFunction) =gt; {  try {  const Authorization = req.cookies['Authorization'] || req.header('Authorization').split('Bearer ')[1] || null;  if (Authorization) {  const secretKey: string = config.get('secretKey');  const verificationResponse = (await jwt.verify(Authorization, secretKey)) as DataStoredInToken;  console.log(verificationResponse);  const userId = verificationResponse._id;   const findUser = await userModel.findById(userId);  if (findUser) {  req.user = findUser;  next();  } else {  next(new HttpException(401, 'Wrong authentication token'));  }  } else {  next(new HttpException(404, 'Authentication token missing'));  }  } catch (error) {  next(new HttpException(401, 'Wrong authentication token'));  } };  
 describe('[GET] /users/:id', () =gt; {  it('response findOne User', async () =gt; {  const userId = 'qpwoeiruty';   const usersRoute = new UsersRoute();  const users = usersRoute.usersController.userService.users;   users.findOne = jest.fn().mockReturnValue({  _id: 'qpwoeiruty',  email: 'a@email.com',  isAdmin: false,  password: await bcrypt.hash('q1w2e3r4!', 10),  });   (mongoose as any).connect = jest.fn();  const app = new App([usersRoute]);  return request(app.getServer()).get(`${usersRoute.path}/${userId}`).expect(200);  });  });  

Приведенный выше тест не удался из-за того, что мой запрос не имел авторизации в заголовке , и я думаю о наборе заголовка, но когда дело доходит до

 const finder = await userModel.findById(userId);  

это не удастся , так как это связано с действием сервера и реальной базой данных, поэтому я не думаю, что это правильный способ написания этого теста.

Что я хочу сделать ,так это издеваться над моей переменной authMiddleware, например

 const findUser = jest.fn().mockReturnValue(  .... )  

чтобы промежуточное программное обеспечение auth могло пройти , что здесь не правильно?