Unit testing jest.fn()v/s jest.mock()?

Unit testing jest.fn()v/s jest.mock()?,unit-testing,jestjs,mocking,Unit Testing,Jestjs,Mocking,对于模拟uuidv4,我使用以下方法: import { v4 as uuidv4 } from "uuid"; jest.mock("uuid"); uuidv4.mockReturnValue("uuid123"); 对于mocking window.confirm,我使用以下命令: window.confirm = jest.fn().mockImplementation(() => true); 这两个都很好用。 但是

对于模拟uuidv4,我使用以下方法:

import { v4 as uuidv4 } from "uuid";
jest.mock("uuid");
uuidv4.mockReturnValue("uuid123");
对于mocking window.confirm,我使用以下命令:

window.confirm = jest.fn().mockImplementation(() => true);
这两个都很好用。 但是当我尝试这样做的时候

const uuidv4 = jest.fn.mockImplementation(() => "uuid123");
我得到这个错误

TypeError: jest.fn.mockImplementation is not a function
我混淆了jest.fn()和jest.mock()


有人能用合适的例子详细说明使用哪一种以及何时使用吗?

给你一个简单的解释:

  • jest.mock
    是模拟某个模块。一旦编写了
    jest.mock('uuid')
    ,则意味着所有导出的内容都将转换为
    jest.mock
    类型,这就是为什么可以模拟
    v4
    方法:
    v4.mockReturnValue('yourV4Id')
jest.mock('aModule');
从“aModule”导入{aMember};
//现在是jest模拟类型jest.fn()
aMember.mockReturnValue(“a值”);
  • jest.fn
    是一个返回
    jest.Mock
    类型的函数,可以将其视为创建所需内容的函数:
const-aMock=jest.fn().mockReturnValue(1)//const-aMock=()=>1;
//区别在于jest模拟类型可以用于断言。大多数情况下都需要检查
//不管有没有人打电话

在你的第二个笑话中。fn你不是在开玩笑。如果您成功了,您将面临一个问题,即您正在测试的代码如何使用名为uuidv4的模拟函数;这就是jest.mock的帮助所在;这就是我得到这个错误的时候。@kob003 jest.fn.mockImplementation()和jest.fn().mockImplementation()不是一回事。前者不正确,后者不正确。无论您在哪里调用uuidv4()都是另一回事,因为如果不正确使用API,您将无法达到这一点。检查文档,其中包含执行此操作的必要示例。