Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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,事实上,这件事发生在我的孩子身上好几次了,我从来都不知道如何解决它 我有一节这样的课 //myClass.js const{get}=require('../models/myModel'); 类MyClass{ 建造师(id){ this.id=id; } 异步getByID(){ 返回get(this.id); } } 以及一个控制器 //controller.js module.exports=MyClass; const MyClass=require('./MyClass.js');

事实上,这件事发生在我的孩子身上好几次了,我从来都不知道如何解决它

我有一节这样的课

//myClass.js
const{get}=require('../models/myModel');
类MyClass{
建造师(id){
this.id=id;
}
异步getByID(){
返回get(this.id);
}
}
以及一个控制器

//controller.js
module.exports=MyClass;
const MyClass=require('./MyClass.js');
module.exports={
getController:(请求、恢复、下一步)=>{
试一试{
const MyObject=新的MyClass(1);
const info=wait MyObject.getByID();
res.send(信息)
}
捕获(e){
其次(e);
}
}
}
当我想做E2E测试时,我需要模拟
getByID
,看看当它解析和拒绝时会发生什么

那么,如何模拟构造函数呢?我做了这样的事

//myclass.spec.js
const MyClass=require('./MyClass.js');
jest.mock('./MyClass',()=>jest.fn().mock实现(()=>({
getByID:Promise.resolve({id:1,名称:'John'}),
})));
描述('测试MyClass',()=>{
它('应该返回信息',()=>{
const res=httpMocks.createResponse();
const mReq=httpMocks.createRequest();
const mNext=jest.fn();
const mRes=mockResponse();
等待管道控制器(mReq、mRes、mNext);
期望(mRes.send).已与(1)一起调用;
完成();
})
})
我知道这个测试目前可以运行,但现在我无法更改
getByID
mock值来查看它拒绝承诺时会发生什么

如果我试图将它包含在测试中(
it
)。。。。它不会嘲笑任何东西。。。 我想要像这样的东西


const MyClass=require('./MyClass.js');
const{pipelineController}=require('./controllers.js')
jest.mock('./MyClass',()=>jest.fn().mock实现(()=>({
getInfo:jest.fn(),
})));
描述('测试MyClass',()=>{
它('应该返回信息',()=>{
ProcessService.getInfo.mockImplementation(()=>Promise.resolve('我想要的值'))
const res=httpMocks.createResponse();
const mReq=httpMocks.createRequest();
const mNext=jest.fn();
const mRes=mockResponse();
等待管道控制器(mReq、mRes、mNext);
期望(mRes.send).已与(1)一起调用;
完成();
})
它('应该返回信息',()=>{
ProcessService.getInfo.mockImplementation(()=>Promise.reject('我想要的原因'))
const res=httpMocks.createResponse();
const mReq=httpMocks.createRequest();
const mNext=jest.fn();
const mRes=mockResponse();
等待管道控制器(mReq、mRes、mNext);
期望(mRes.send).已与(1)一起调用;
完成();
})
})

由于实例化后立即调用了
getByID
,因此模拟类之外应该有一个间谍来更改实现

这可以通过类auto mock实现,但可能适用于此特定情况:

jest.mock('./MyClass.js')
const MyClass = require('./MyClass.js');
...
MyClass.prototype.getByID.mockResolvedValue({id: 1, name: 'John'});
// instantiate MyClass and call getByID
这可以通过在类外公开间谍来实现:

const mockGetByID = jest.fn();
jest.mock('../../../services/ProcessService', () => jest.fn(() => (
  { getByID: mockGetByID }
)));
const MyClass = require('./MyClass.js');
...
mockGetByID.mockResolvedValue({id: 1, name: 'John'});
// instantiate MyClass and call getByID

由于在实例化之后立即调用了
getByID
,因此在模拟类之外应该有一个间谍来更改实现

这可以通过类auto mock实现,但可能适用于此特定情况:

jest.mock('./MyClass.js')
const MyClass = require('./MyClass.js');
...
MyClass.prototype.getByID.mockResolvedValue({id: 1, name: 'John'});
// instantiate MyClass and call getByID
这可以通过在类外公开间谍来实现:

const mockGetByID = jest.fn();
jest.mock('../../../services/ProcessService', () => jest.fn(() => (
  { getByID: mockGetByID }
)));
const MyClass = require('./MyClass.js');
...
mockGetByID.mockResolvedValue({id: 1, name: 'John'});
// instantiate MyClass and call getByID

那门课没什么意义。为什么id不是该方法的参数?它只是该类的简介。我想学习的是如何用jestThat类来模拟和更改值,该类没有多大意义。为什么id不是该方法的参数?它只是该类的简介。我想学的是如何嘲笑和改变耶西·埃斯特斯的价值观!谢谢你的回复。这目前不起作用。我得到一个引用错误
ReferenceError:const mockGetByID=jest.fn()不清楚ReferenceError到底指的是什么,因为它应该清楚地提到麻烦的变量名,粘贴时是否修改了错误消息?更新。mockReturnValue可能应该替换为一个函数,以便懒洋洋地访问mockGetByID!谢谢你的回复。这目前不起作用。我得到一个引用错误
ReferenceError:const mockGetByID=jest.fn()不清楚ReferenceError到底指的是什么,因为它应该清楚地提到麻烦的变量名,粘贴时是否修改了错误消息?更新。mockReturnValue可能应该替换为函数,以便惰性地访问mockGetByID。