我不熟悉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()
匹配器的理解?
答案 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!
});