在我的单元测试套件中,我有以下模拟:
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.myMethod
为undefined
时,单位测试如何通过?
答案 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(() => {}))