toThrow()匹配器的测试用例失败

时间:2019-04-30 19:29:03

标签: unit-testing jestjs

我不熟悉JS中的单元测试,学习jest框架。我有一个简单的toThrow()匹配器,可以用来测试我的投掷错误功能。

我编写了简单的foo()函数,该函数仅引发错误并使用toThrow()匹配器对其进行测试。

index.js

export const foo = () => {
  throw new Error('bar');
};

index.test.js

import {foo} from './index';

test('foo', () => {
  expect(foo()).toThrow();
});

据我了解,由于函数在任何情况下均会引发错误,因此toThrow()检查的预期结果应解析为通过的测试。但是,当我运行yarn test时,出现以下错误:

 FAIL  index.test.js
  ✕ foo (3ms)

  ● foo

    bar

      21 | 
      22 | export const foo = () => {
    > 23 |   throw new Error('bar');
         |         ^
      24 | };
      25 | 

      at foo (index.js:23:9)
      at Object.<anonymous> (index.test.js:13:10)

Test Suites: 1 failed, 1 total

我的代码中是否存在一些错误,或者我对toThrow()匹配器的理解?

1 个答案:

答案 0 :(得分:0)

使用toThrow时,您需要将函数传递给expect

在这种情况下,您只需传递foo

index.js

export const foo = () => {
  throw new Error('bar');
};

index.test.js

import { foo } from './index';

test('foo', () => {
  expect(foo).toThrow();  // Success!
});

如果投掷取决于参数,则可以传递一个调用函数的箭头函数:

index.js

export const foo = bar => {
  if (bar > 0) throw new Error('bar > 0');
};

index.test.js

import { foo } from './index';

test('foo', () => {
  expect(() => foo(0)).not.toThrow();  // Success!
  expect(() => foo(1)).toThrow();  // Success!
});