Javascript 预期调用一个断言,但收到零个断言调用
我试图测试一个方法使用笑话。。。该方法应返回Promise.reject() 以下是我编写的代码:Javascript 预期调用一个断言,但收到零个断言调用,javascript,unit-testing,promise,jestjs,es6-promise,Javascript,Unit Testing,Promise,Jestjs,Es6 Promise,我试图测试一个方法使用笑话。。。该方法应返回Promise.reject() 以下是我编写的代码: test('testing Invalid Response Type', () => { const client = new DataClient(); client.getSomeData().then(response => { console.log("We got data: "+ response);
test('testing Invalid Response Type', () => {
const client = new DataClient();
client.getSomeData().then(response => {
console.log("We got data: "+ response);
}).catch(e => {
console.log("in catch");
expect(e).toBeInstanceOf(IncorrectResponseTypeError);
});
expect.assertions(1);
});
当我运行测试时,它会打印“in-catch”,但由于以下异常而失败:
预期调用一个断言,但收到零个断言调用。
console.log src/data/dataclient.test.js:25
in catch
● testing Invalid Response Type
expect.assertions(1)
Expected one assertion to be called but received zero assertion calls.
at extractExpectedAssertionsErrors (node_modules/expect/build/extract_expected_assertions_errors.js:37:19)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
console.log src/data/dataclient.test.js:25
捕获
● 测试无效的响应类型
expect.assertions(1)
预期调用一个断言,但收到零个断言调用。
在extractExpectedAssertionsErrors(node_modules/expect/build/extract_expected_断言_errors.js:37:19)
在
在进程中。_tick回调(内部/process/next_tick.js:188:7)
我通过在块之前添加return语句解决了这个问题。
使用return语句,函数将等待catch块完成。。因此,expect将被执行
test('testing Invalid Response Type', () => {
const client = new DataClient();
return client.getSomeData().then(response => {
console.log("We got data: "+ response);
}).catch(e => {
console.log("in catch");
expect(e).toBeInstanceOf(IncorrectResponseTypeError);
});
expect.assertions(1);
});
您需要等待承诺完成以检查断言的数量(以到达
.catch
块)
请参阅,特别是异步/等待解决方案。事实上,他们的例子与你的问题几乎相同
在您的示例中,您将执行以下操作:
test('testing Invalid Response Type', async () => { // <-- making your test async!
const client = new DataClient();
await client.getSomeData().then(response => { // <-- await for your function to finish
console.log("We got data: "+ response);
}).catch(e => {
console.log("in catch");
expect(e).toBeInstanceOf(IncorrectResponseTypeError);
});
expect.assertions(1);
});
test('testing Invalid Response Type',async()=>{/{/{
控制台。登录(“捕获”);
期望(e).安装(不正确的响应类型错误);
});
期望.断言(1);
});
顺便说一句,公认的解决方案也可以工作,但不适用于异步代码的多个测试看起来您没有匹配的错误类型。(您捕获了一个错误,但它不是类型
IncorrectResponseTypeError
)也许您可以尝试在控制台中记录e
,看看它实际上是什么类型如果您使用的是async/await呢?您在运行expect.assertions(1);
之前返回。@ckim16看到我的答案,没有理由不这样做