#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 могло пройти , что здесь не правильно?