Я хочу проверить маршрут «добавить элемент», но вы не можете добавить его, если он уже существует в базе данных. Есть ли способ, чтобы тест не проваливался всякий раз, когда этот пользователь существует в БД, например, оператор if для предотвращения его запуска или что-то в этом роде?
Контроллер:
export const addArtist = async (
req: Request,
res: Response,
next: NextFunction,
) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const error: I_ErrorObject = new Error('Validation failed.');
error.statusCode = 422;
error.data = errors.array()[0];
return next(error);
}
// @ts-ignore
const { userId } = req;
const { name } = req.body;
const findArtistInDb = await Artist.findOne({ name });
// ==== If artist exist in db ====
if (findArtistInDb) {
const usersList = await findArtistInDb.get('users');
const doesUserExist = usersList.includes(userId.toString());
// If userId exists in users array
if (doesUserExist) {
const error: I_ErrorObject = new Error(
'This user ID already exists in this artist users.',
);
error.statusCode = 409;
return next(error);
}
// Artist exists but current user ID is not there - user didnt added this artist yet
else {
const addedArtist = await Artist.findOneAndUpdate(
{ name },
{ $push: { users: { _id: userId } } },
{ new: true },
);
return res.status(201).json({
message: 'UserId added to Artist successfully.',
artist: { name: addedArtist.name, _id: addedArtist._id },
});
}
}
Test:
it('should add user', async (done) => {
const res = await request(app)
.put('/likes/artists')
.set('Authorization', `Bearer ${token}`)
.send({ name: 'Dali' });
expect(res.status).toBe(201);
done();
});
Если у меня есть что-то до или после ".send", чтобы проверить, существует ли пользователь, мне нужно здесь запросить базу данных? Есть ли способ "smartify" тест , поэтому при ошибке он проверяет 409 и при успехе он проверяет 201 или что-то подобное?
Редактировать: я добавил, если проверяет, но я чувствую, что там Это лучший способ go об этом, если кто-нибудь знает, я был бы благодарен.
it('should return json data with either added user or error msg', async (done) => {
const res = await request(app)
.put('/likes/artists')
.set('Authorization', `Bearer ${token}`)
.send({ name: 'dmx' });
if (res.status === 409) {
expect(res.status).toBe(409);
expect(res.body).toHaveProperty('message');
} else if (res.status === 201) {
expect(res.status).toBe(201);
expect(res.body.artist).toHaveProperty('name');
}