Supertest возвращает 404 ошибку при запросе на роут с параметром
Такой роут точно есть и через постман работает
Код теста
describe('Test search user', () => {
let userData: IUserData[] = [
{nickname: 'test', name: 'Test', phone: '+380666876892', sessionCode: '12345678'},
{nickname: 'user', name: 'Test2', phone: '+380506564229', sessionCode: '87654321'}
];
beforeAll(async done => {
await resetDB();
//create data
await Promise.all(userData.map(async d => {
const user = await UserRepository.create(d);
return user._id;
}));
done();
});
jest.setTimeout(30000);
it('Test success user search', async done => {
const token = await jwt.sign({
session: userData[0].sessionCode,
expires: Date.now() + 300000
}, <string>process.env.JWT_SECRET);
//make api call
st(app)
.get(`/users/${userData[1].nickname}`)
.set('Authorization', `Bearer ${token}`)
.expect(200)
.expect(res => {
expect(res.body).toMatchObject({
message: 'User was found',
user: userData[1]
})
})
.end(done);
});
it('Test not authorized user search', async done => {
st(app)
.get(`/users/${userData[1].nickname}`)
.expect(401)
.end(done);
});
it('Test search of not exists user', async done => {
const token = await jwt.sign({
session: userData[0].sessionCode,
expires: Date.now() + 300000
}, <string>process.env.JWT_SECRET);
st(app)
.get('/users/notFound')
.set('Authorization', `Bearer ${token}`)
.expect(200)
.expect({
message: 'User with this nickname are not exists',
user: null
})
.end(done);
});
});
Регистрация роута
usersRouter.get('/:nickname', UsersController.getUser);
rootRouter.use('/users', UsersRoutes);
Код контроллера
class UsersController{
async getUser(req: IGetUserRequest, res: Response){
const nickname = req.params.nickname,
user = await UsersRepository.getByNick(nickname);
if(!user) {
return res.status(200).json({
message: 'User with this nickname are not exists',
user: null
});
}
else{
return res.status(200).json({
message: 'User was found',
user
});
}
}
}
Ошибка
Error: expected 200 "OK", got 404 "Not Found"