Javascript 为什么开玩笑';托斯罗赢了';直接在构造函数中创建ES6类的实例时不起作用?
这里有两个测试用例,一个有效,另一个无效Javascript 为什么开玩笑';托斯罗赢了';直接在构造函数中创建ES6类的实例时不起作用?,javascript,ecmascript-6,jestjs,es6-class,Javascript,Ecmascript 6,Jestjs,Es6 Class,这里有两个测试用例,一个有效,另一个无效 不工作的故障消息如下所示: ● 测试构造器›不工作 期望值 class TestObject { constructor(value) { if (value === null || value === undefined) { throw new Error('Expect a value!'); } } } describe('test the constructor', () => { test('i
不工作的故障消息如下所示:
● 测试构造器›不工作
期望值
class TestObject {
constructor(value) {
if (value === null || value === undefined) {
throw new Error('Expect a value!');
}
}
}
describe('test the constructor', () => {
test('it works', () => {
expect(() => {
new TestObject();
}).toThrow();
});
test('not work', () => {
expect(new TestObject()).toThrow();
});
});
在新的TestObject(tests/client/utils/aaa.test.js:4:11)
反对。(tests/client/utils/aaa.test.js:17:12)
允诺
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
为什么我需要在函数调用中包装该调用,当函数只返回一个普通值,甚至一个承诺时,我们不需要包装,我们可以使用async/await
在expect()
中检查它,而不是在expect()
中创建一个函数
这里发生了什么事?这里
at new TestObject (tests/client/utils/aaa.test.js:4:11)
at Object.<anonymous> (tests/client/utils/aaa.test.js:17:12)
at Promise (<anonymous>)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
首先计算新的TestObject()
,然后计算expect(…)
,然后计算…toThrow()
。当newtestobject()
抛出时,其他任何东西都无关紧要
这就是为什么toThrow
需要一个应该抛出的函数:
expect(new TestObject()).toThrow();
这样,在调用时可以在内部用try..catch
包装它
它在JasminetoThrow
和Chaito.throw
断言中也同样有效
expect(() => {
new TestObject();
}).toThrow();