javascript - 使用 Jest 在另一个函数中测试一个函数

标签 javascript node.js jestjs

我如何使用 jest 测试下面的代码片段。我正在尝试测试 winston 自定义格式 printf

// sample.js

import {aa:{b}} = require("thirparty-package")

const a = () => {
   return b((log) => {
     return `log message will be ${log.message}`
   })
}

module.exports = {
  a
}


// sample.test.js
const customFunctions = require('./sample')

test('should check b function is called and returns a string', () => {
   expect(customFunctions.a).toHaveBeenCalled() // throwing error 
    //jest.fn() value must be a mock function or spy.
})

最佳答案

如果需要测试的是b那么它应该是一个 spy ,而不是a

应该模拟第三方模块(demo):

const bMock = jest.fn();
jest.mock('thirparty-package', () => ({ aa: { b: bMock } }));
const { a } = require('./sample');
a();
const callback = bMock.mock.calls[0][0]; 
expect(callback).toEqual(expect.any(Function));
expect(callback({ message: 'foo' })).toBe('log message will be foo');

关于javascript - 使用 Jest 在另一个函数中测试一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491134/

相关文章:

javascript - 使用API​​的YouTube下标用户

javascript - 我们可以在 </body> 之前的 IE 条件注释中添加 javascript

javascript - 如何使用 Ruby On Rails 中的数据创建 JavaScript 数组?

typescript - 仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts)

node.js - Node Lambda : Import of ts-node results in TypeError

javascript - 尝试从目标事件获取数据时在 IE8 中出现问题

javascript - 将 Node gm 与 Promise 和 buffer 一起使用

node.js - 超过 30000 毫秒的 Puppeteer 导航超时

node.js - 如何将 $split 运算符与聚合结合使用

javascript - 测试子类的方法