如何在单元测试时测试函数是否相等

时间:2017-11-17 12:51:40

标签: javascript reactjs jest

我有以下代码:

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]

看起来它并不了解功能是相同的。

那么如何在功能相同时检测呢?

1 个答案:

答案 0 :(得分:1)

这将始终返回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);