Маршрут тестирования, который зависит от (если элемент существует в БД) (аналогично регистрации) - Jest-Node - PullRequest
0 голосов
/ 23 января 2020

Я хочу проверить маршрут «добавить элемент», но вы не можете добавить его, если он уже существует в базе данных. Есть ли способ, чтобы тест не проваливался всякий раз, когда этот пользователь существует в БД, например, оператор 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');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...