【问题标题】:Jest unit test assertion fails though code is reached尽管已到达代码,但 Jest 单元测试断言失败
【发布时间】:2021-09-15 16:13:22
【问题描述】:

我正在尝试对我用 jest 编写的小型 NodeJS 应用程序进行单元测试,但我的断言遇到了一些问题。

我正在尝试测试的功能的代码:

sendData(process.env.API_HOST_DOMAIN, process.env.API_SENSORS_ENDPOINT, payload).then(() => {
  Buffer.clear();
}).catch(() => {
  Buffer.write(temps);
})

sendData 函数是一个执行以下操作的函数:

import axios from 'axios';

const sendData = (baseUrl, path, data) => {
  return axios.post(path, {
    'data': data
  }, { baseURL: baseUrl });
}

export default sendData;

然后在我的单元测试中,我尝试使用模拟 axios 调用

axios.post.mockImplementation(() => Promise.reject());

App.run();

expect(Buffer.write).toHaveBeenCalled();

当我以详细模式运行此程序时,console.log()s 放置在 catch 块中。我可以看到它到达了那部分。然而,断言仍然失败。在我看来,我编写测试的方式有些不对劲,但是我无法弄清楚它是什么。

【问题讨论】:

    标签: node.js unit-testing jestjs


    【解决方案1】:

    我还没有尝试过,但你应该从 Buffer 的 write 方法中创建一个开玩笑的模拟函数,如下所示:

    const spy = jest.spyOn(Buffer, "write");
    

    然后在断言中使用spy模拟函数。

    【讨论】:

    • 我现在用const bufferWrite = jest.spyOn(Buffer, 'write'); 创建了一个间谍并设置了断言来检查它expect(bufferWrite).toHaveBeenCalled() 但它仍然告诉我该函数尚未执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多