Javascript 预期调用一个断言,但收到零个断言调用

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);

我试图测试一个方法使用笑话。。。该方法应返回Promise.reject()

以下是我编写的代码:

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看到我的答案,没有理由不这样做