Jestjs 如何使用jest.fn()模拟函数

Jestjs 如何使用jest.fn()模拟函数,jestjs,Jestjs,jest文档说,有两种方法可以使用模拟函数:要么通过require()调用模拟组件(通过jest.mock('moduleName')),要么在测试中显式地从jest.fn()请求一个: 所以我试着模拟一个函数,每当一个测试调用减号函数时,它就会执行模拟的函数并返回10,而不是a*b,但它的工作方式与我想的不一样 app.js: 功能添加(a、b){ 返回乘法(a,b)+b; } 函数乘法(a,b){ 返回a*b; } module.exports=添加; 添加test.js const ad

jest文档说,
有两种方法可以使用模拟函数:要么通过require()调用模拟组件(通过jest.mock('moduleName')),要么在测试中显式地从jest.fn()请求一个:

所以我试着模拟一个函数,每当一个测试调用
减号
函数时,它就会执行模拟的函数并返回
10
,而不是
a*b
,但它的工作方式与我想的不一样

app.js:

功能添加(a、b){
返回乘法(a,b)+b;
}
函数乘法(a,b){
返回a*b;
}
module.exports=添加;
添加test.js

const add=require('./add');
描述('添加',()=>{
它('应该加两个数字',()=>{
const multiply=jest.fn((a,b)=>{10})
期望(添加(1,2)).toBe(12);
});
});

注:如果我更改
expect(添加(1,2)).toBe(12)到<代码>期望(添加(1,2)).toBe(4)
测试将通过,但我想模拟
乘法并返回10。因此,当我实际调用made to
multiply
函数时,它应该调用模拟函数,而不是真正的实现。

您必须稍微更改
app.js
的结构,以按照您想要的方式进行测试

您可以将
multiply()
提取到自己的文件中,如下所示:

mulitiply.js

函数乘法(a,b){
返回a*b;
}
app.js

功能添加(a、b){
返回乘法(a,b)+b;
}
add.test.js

const add=require('./add');
常数乘法=要求('./乘法');
jest.mock('multiply',()=>jest.fn(a,b)=>10)
描述('添加',()=>{
它('添加数字',()=>{
期望(添加(1,2)).toBe(12);
});
});
或者将实现更改为如下所示:

add.js

函数加法(乘法){
乘
}
add.test.js

const add=require('./add');
描述('添加',()=>{
它('添加数字',()=>{
常数乘=jest.fn(a,b)=>10;
expect(加(乘(1,2)).toBe(12);
});
});

你必须确保你在模拟在
app.js
中实际调用的函数,现在你所拥有的只是一个分配给名为
multiply
变量的模拟函数,但是jest不知道你的意思是要模拟
app.js
@MaxMillington中的
multiply
函数,我该怎么做st.mock('multiply',()=>jest.fn(a,b)=>{10})
,这行代码似乎无效。你能解释一下这行代码中发生了什么吗?更新了语法,一旦它被批准,你就能看到它。