在使用 Jest 进行测试时,我们经常需要使用 mock 函数来模拟一些操作。在测试时,我们可能会遇到这样的警告提示:
Warning: expect(...).toHaveBeenCalled() 接收了一个参数,但这个参数不是一个 mock 函数
这个警告提示出现的原因是我们没有使用正确的方式来传递我们的 mock 函数。
什么是 mock 函数
在 Jest 中,mock 函数是一种用于模拟函数调用的方式。我们可以使用 Jest 提供的 jest.fn()
方法来创建一个 mock 函数,该方法会返回一个模拟函数,我们可以对它进行各种操作。
我们创建一个 mock 函数的示例代码如下:
const myMockFunction = jest.fn();
为什么要使用 mock 函数
在进行单元测试时,我们可能需要模拟一些方法或者函数的调用。为了不改变这些方法或者函数的实际实现,我们可以使用 Jest 提供的 mock 函数来模拟这些方法或者函数的调用,从而能够更好地进行测试。
如何避免遇到上述警告提示
当我们在测试中使用 expect(...).toHaveBeenCalled()
这个断言时,我们需要将我们的 mock 函数传递进去作为参数。
例如,下面的代码就可以避免上述警告提示:
it('function is called', () => { const mockFn = jest.fn(); // some code here expect(mockFn).toHaveBeenCalled(); });
如何诊断上述警告提示
当我们遇到上述警告提示时,我们需要检查目标函数是否被正确地 mock 了。通常情况下,我们可以通过查看测试代码,找到未正确 mock 的函数,并使用 jest.fn()
方法进行 mock。
我们还可以通过在 Jest 配置文件中启用 verbose 模式,从而获取更详细的信息。
{ "verbose": true }
总结
在使用 Jest 进行测试时,使用 mock 函数进行模拟是一种比较常用的做法。当我们遇到了上述 Warning 消息时,需要检查是否未正确传递 mock 函数。使用 Jest 提供的 mock 函数能够更好地进行单元测试,帮助我们测试我们的代码是否符合预期。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652cf8587d4982a6ebe7aaf1