模拟函数是“未定义”但单元测试不会失败

时间:2017-11-22 12:22:25

标签: javascript react-native jestjs

在我的单元测试套件中,我有以下模拟:

  beforeEach(() => {
        NativeModules.MyModule = {
            myMethod: jest.fn()
        };
     })

使用它的单元测试:

 it('has some functionality', () => {
    console.log(JSON.stringify(NativeModules.MyModule.myMethod));
    expect(NativeModules.MyModule.myMethod).toHaveBeenCalledTimes(1);
});

console.log函数打印undefined,但测试通过。

但是,如果我添加这一行:

expect(undefined).toHaveBeenCalledTimes(1);

测试将失败并显示以下消息:

expect(jest.fn())[.not].toHaveBeenCalledTimes()

jest.fn() value must be a mock function or spy.
Received: undefined

那么,NativeModules.MyModule.myMethodundefined时,单位测试如何通过?

1 个答案:

答案 0 :(得分:2)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

  

如果未定义,则在转换期间会遇到函数或符号   它被省略(当它在一个对象中找到时)或被删除   null(当在数组中找到它时)。 JSON.stringify也可以   在传入"纯粹"时返回undefined价值观   JSON.stringify(function(){})或JSON.stringify(undefined)。

如果直接记录模拟函数(console.log(NativeModules.MyModule.myMethod)而不是记录日志 console.log(JSON.stringify(NativeModules.MyModule.myMethod))你应该看到你期望的输出。

例如:



console.log(() => {})
console.log(JSON.stringify(() => {}))