istanbul игнорировать, если не работает - тест на стороне сервера - PullRequest
0 голосов
/ 03 августа 2020

Я хочу пропустить второй оператор if Во время тестирования я не буду передавать какой-либо «идентификатор пользователя», поэтому я хочу пропустить второй if.

async update(id: string, userid: string, input: UpdateNotificationInput) {
    const items = await this.model.query('id').eq(id).exec();
    if (items.length === 1) {
      /* istanbul ignore if */
      if (items[0].userId !== userid) {
        throw new BadRequestException();
      }
      const { appTargetId, createDate } = items[0];
      return await this.model.update({ appTargetId, createDate }, input);
    } else {
      throw new BadRequestException();
    }
  }


Следующее ниже if не должно быть доступно. игнорировать, если "или" istanbul ignore next "не работает. Когда я запускаю тестовое покрытие, открывается оператор if, и я получаю сообщение об ошибке. Правильно ли я его использую?

1 Ответ

0 голосов
/ 30 августа 2020

Если я правильно понимаю, вы никогда не передаете userId в тестах, поэтому условие if (items[0].userId !== userid) всегда истинно, и ваш тест не проходит.

*

/* istanbul ignore if */ комментарий отключает учет только этой строки в отчете о покрытии . Это не мешает вашему исполнителю тестов выполнить строку.

Если вы хотите игнорировать строку в тестах, вы должны сделать ее условной для тестовой среды. В узле вы можете, например, использовать:

      if (process.env.NODE_ENV != 'test' && items[0].userId !== userid) {
        throw new BadRequestException();
      }

, а затем запускать тесты с набором переменных NODE_ENV = test env (который используется по умолчанию в большинстве настроек).

Лучшим подходом было бы на самом деле передайте правильный userId в ваших тестах. Тогда комментарий istanbul ignore if сделает содержимое оператора if не засчитанным для покрытия тестом, поэтому вам не нужно писать этот дополнительный тест для плохого состояния запроса.

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

...