javascript - 单元测试时如何测试函数的相等性

标签 javascript reactjs jestjs

我有以下代码:

DeviceEventEmitter.addListener(eventName, () => { return 'myHandler' })

我正在通过以下测试测试 DeviceEventEmitter 是否被调用:

DeviceEventEmitter.addListener = jest.fn();
expect(DeviceEventEmitter.addListener.mock.calls[0][1]).toEqual(() => { return 'myHandler' });

但是,测试失败:

expect(received).toEqual(expected)

Expected value to equal:
  [Function anonymous]
Received:
  [Function anonymous]

看起来它不明白功能是相同的。

那么如何让它检测功能是否相同?

最佳答案

这将始终返回 false,因为您正在创建一个新函数作为 toEqual 函数的参数:

expect(DeviceEventEmitter.addListener.mock.calls[0][1]).toEqual(() => { return 'myHandler' });

同体的2个功能还是不同的。您必须保留对监听器的引用,然后比较引用:

var listener = () => { return 'myHandler' }
DeviceEventEmitter.addListener(eventName, listener)

DeviceEventEmitter.addListener = jest.fn();
expect(DeviceEventEmitter.addListener.mock.calls[0][1]).toEqual(listener);

关于javascript - 单元测试时如何测试函数的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47351091/

相关文章:

javascript - 有一个可以计算秒和毫秒的计时器

javascript - 测试使用带有 Jest 和 enzyme 的样式组件创建的组件

javascript - TypeError : routingState. 等于不是函数 | Jest 测试用例

reactjs - 如何模拟 react 自定义钩子(Hook)返回值?

javascript - 鼠标悬停时单词高亮显示

javascript - 自动单击表中的 JavaScript 链接

reactjs - 在 React+Redux 应用程序中将网络调用放在哪里

javascript - 如何在 react 中处理两个相似的组件

javascript - 为 Node CommonJS 模块创建不可变类

javascript - 清除 javascript 的 Websocket 上的缓冲区