Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jest测试中模拟外部函数调用_Javascript_Node.js_Unit Testing_Jestjs - Fatal编程技术网

Javascript 如何在jest测试中模拟外部函数调用

Javascript 如何在jest测试中模拟外部函数调用,javascript,node.js,unit-testing,jestjs,Javascript,Node.js,Unit Testing,Jestjs,下面是要测试的Node.js模块(userdata.js文件): 和测试文件: const UserData = require('/.userdata') test('UserData.getData', () => { expect(UserData.getData('John Smith')).toBe('John\' manager'); }); 我想模拟myService.getUserData和/或myService.getManagerData函数调用,我没有在测试文件

下面是要测试的Node.js模块(userdata.js文件):

和测试文件:

const UserData = require('/.userdata')
test('UserData.getData', () => {
  expect(UserData.getData('John Smith')).toBe('John\' manager');
});
我想模拟myService.getUserData和/或myService.getManagerData函数调用,我没有在测试文件中直接声明这些函数。。如何正确地模拟它们以返回一些伪结果?

您可以使用它为
myService.getUserData
myService创建存根。getManagerData方法

例如

userData.js

constmyservice=require('./myService');
类用户数据{
获取数据(查询){
返回新承诺((解决、拒绝)=>{
getUserData(查询)。然后((userdata)=>{
getManagerData(用户数据)。然后((managerdata)=>{
解析(managerdata);
});
});
});
}
}
module.exports=用户数据;
myService.js

const myService={
getUserData(查询){
返回“真实用户数据”;
},
getManagerData(用户数据){
返回“真实经理数据”;
},
};
module.exports=myService;
userData.test.js

constuserdata=require('./UserData');
const myService=require('./myService');
描述('61784452',()=>{
之后(()=>{
开玩笑。恢复记忆();
});
它('should pass',async()=>{
jest.spyOn(myService,'getUserData').mockResolvedValueOnce('fake user data');
jest.spyOn(myService,'getManagerData').mockResolvedValueOnce('fake manager data');
const userData=new userData();
const actual=await userData.getData('query');
expect(实际).toEqual(“假经理数据”);
expect(myService.getUserData).toBeCalledWith('query');
期望(myService.getManagerData).toBeCalledWith('false user data');
});
});
单元测试结果和覆盖率报告:

PASS stackoverflow/61784452/userData.test.js(12.908s)
61784452
✓ 应通过(5ms)
--------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
--------------|---------|----------|---------|---------|-------------------
所有文件| 84.62 | 100 | 71.43 | 84.62 |
myService.js | 50 | 100 | 0 | 50 | 3-6
userData.js | 100 | 100 | 100 | 100 |
--------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:13.99秒
您可以使用为
myService.getUserData
myService创建存根。getManagerData方法

例如

userData.js

constmyservice=require('./myService');
类用户数据{
获取数据(查询){
返回新承诺((解决、拒绝)=>{
getUserData(查询)。然后((userdata)=>{
getManagerData(用户数据)。然后((managerdata)=>{
解析(managerdata);
});
});
});
}
}
module.exports=用户数据;
myService.js

const myService={
getUserData(查询){
返回“真实用户数据”;
},
getManagerData(用户数据){
返回“真实经理数据”;
},
};
module.exports=myService;
userData.test.js

constuserdata=require('./UserData');
const myService=require('./myService');
描述('61784452',()=>{
之后(()=>{
开玩笑。恢复记忆();
});
它('should pass',async()=>{
jest.spyOn(myService,'getUserData').mockResolvedValueOnce('fake user data');
jest.spyOn(myService,'getManagerData').mockResolvedValueOnce('fake manager data');
const userData=new userData();
const actual=await userData.getData('query');
expect(实际).toEqual(“假经理数据”);
expect(myService.getUserData).toBeCalledWith('query');
期望(myService.getManagerData).toBeCalledWith('false user data');
});
});
单元测试结果和覆盖率报告:

PASS stackoverflow/61784452/userData.test.js(12.908s)
61784452
✓ 应通过(5ms)
--------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
--------------|---------|----------|---------|---------|-------------------
所有文件| 84.62 | 100 | 71.43 | 84.62 |
myService.js | 50 | 100 | 0 | 50 | 3-6
userData.js | 100 | 100 | 100 | 100 |
--------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:13.99秒

你试过开玩笑吗?
试过了。但问题是如何正确地做到这一点。。若我在测试文件中导入myService并在那个里模拟它,那个么它真的能在userData调用中工作吗?我如何在并没有导入myService的测试文件中模拟myService.getUserData。如果导入并模拟,它会工作吗?因为它本身在UserData模块中没有模拟。您是否尝试过
jest.mock()
?我尝试过。但问题是如何正确地做到这一点。。若我在测试文件中导入myService并在那个里模拟它,那个么它真的能在userData调用中工作吗?我如何在并没有导入myService的测试文件中模拟myService.getUserData。如果导入并模拟,它会工作吗?因为它在UserData模块本身中没有模拟
const UserData = require('/.userdata')
test('UserData.getData', () => {
  expect(UserData.getData('John Smith')).toBe('John\' manager');
});