我可以使用jest.fn(() => 1)
或() => 1
创建一个模拟函数。即使不需要,我也应该做第一个吗? (例如,我没有使用expect().toHaveBeenCalled()
)
const foo = ({ helper }) => helper()
test('example v1', () => {
const arg = {
helper: jest.fn(() => 1)
}
expect(foo(arg)).toBe(1)
})
test('example v2', () => {
const arg = {
helper: () => 1
}
expect(foo(arg)).toBe(1)
})
始终使用jest.fn()
可能带来的好处包括:
expect(arg.helper).toHaveBeenCalled*()
答案 0 :(得分:0)
您可以仅在一个单元测试中对helper
函数进行一次模拟,也可以始终在所有单元测试中对其进行模拟,并且还可以恢复helper
函数的原始实现。
在测试foo
函数时,请模拟它依赖的所有函数,以便您可以创建隔离的环境进行测试。无需担心其他函数和依赖项的实际返回值。因为我们模拟了所有依赖项的返回值。
更新:
对于简单的代码,没关系。但是,对于意味着有许多条件和语句分支的复杂代码,您需要确保要测试的函数内部的函数确实具有正确的参数。
然后,如果该函数访问数据库或发送HTTP请求,该怎么办?在这种情况下,您确实需要为其创建一个测试存根,而不是访问实际的外部资源。正如我所说,为单元测试创建一个隔离的沙箱环境。