Почему Jest трактует «неопределенный» так же, как и «Ошибка»? - PullRequest
0 голосов
/ 03 февраля 2020

Я пишу модульный тест, который ищет определенные c ошибки, когда определенные параметры не предоставляются объекту. В рамках настройки для моих тестов я передаю ему объект, содержащий входные параметры и ожидаемое сообщение об ошибке. При их написании я оставлял ожидаемое сообщение об ошибке из предоставленного объекта для одного из тестовых случаев. Этот тест должен возвращать объект ошибки с сообщением 'Node process.env cannot be null', он сравнивается с неопределенным объектом в .toThrow(). К моему удивлению, этот тест все же прошел, а не выдал ошибку. .toThrow() Джеста, похоже, воспринимает undefined как то же значение, что и мое сообщение об ошибке. Я использую Jest 24.9.0 для своих тестов.

Почему этот тест проходит? Это связано с поведением Typescript / Javascript? Это как-то связано с Jest?

it.each([
  [
    'missing event info',
    {
      event: undefined,
      env: getValidEnv(),
      expectedError: 'handler event cannot be null'
    }
  ],
  [
    'missing environment info',
    {
      event: getValidEvent(),
      env: undefined,
    }
  ]
])('should throw an error if (%s)', (testCaseName: any, params: any) => {
  const parser = new InputParser(params.event, params.env);
  expect(() => parser.getInputs()).toThrow(params.expectedError);
});

Редактировать:

Дополнительное примечание: то же самое происходит, если params.expectedError задана пустая строка ''.

1 Ответ

0 голосов
/ 03 февраля 2020

Аргумент toThrow является необязательным. Передача undefined явно означает то же самое, что просто вызвать его без аргумента, то есть xx.toThrow(undefined) обрабатывается так же, как и xx.toThrow(), который просто проверяет, была ли выбрана какая-либо ошибка. Когда вы выдаете ошибку, toThrow проходит.

Вызов с пустой строкой toThrow('') проходит, потому что Jest проверяет подстроку , когда строка передается в качестве параметра. Поскольку '' является подстрокой любой строки, она проходит. См. https://jestjs.io/docs/en/expect#tothrowerror.

Если вы хотите убедиться, что выдается именно правильная ошибка, вы можете использовать toThrow(new Error('Node process.env cannot be null')).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...