Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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_Unit Testing_Mocking_Jestjs - Fatal编程技术网

Javascript Jest将模拟类传递给构造函数

Javascript Jest将模拟类传递给构造函数,javascript,unit-testing,mocking,jestjs,Javascript,Unit Testing,Mocking,Jestjs,假设我有 class A { constructor(classB) { } } class B { } 如何在测试中实例化类A,并将模拟的类B传递给它?基本上我想做 a = new A(mockedClassB); 具体来说,我的问题是如何创建mockedClassB,以便将其传递给A构造函数 这里有一个解决方案: a.js: 导出默认A类{ B类; 建造师(B类){ this.classB=classB; } getName(){ 返回这个.classB.getName()

假设我有

class A {
  constructor(classB) {

  }
}

class B {

}
如何在测试中实例化
类A
,并将模拟的
类B
传递给它?基本上我想做

a = new A(mockedClassB);
具体来说,我的问题是如何创建
mockedClassB
,以便将其传递给A构造函数

这里有一个解决方案:

a.js

导出默认A类{
B类;
建造师(B类){
this.classB=classB;
}
getName(){
返回这个.classB.getName();
}
}
b.js

导出默认类别B{
getName(){
返回“来自b的真实姓名”;
}
//稍后添加新方法
getAge(){
返回23;
}
}
a.test.js

从“/A”导入A;
从“/B”导入B;
开玩笑的模仿('./b');
描述('61596704',()=>{
它('应该通过',()=>{
常量mockedClassBinInstance=new B();
mockedClassBinInstance.getName.mockReturnValueOnce('mocked name from b');
常数a=新的a(模拟类实例);
常量实际值=a.getName();
expect(实际).toEqual('b'中的模拟名称');
});
它('B的getAge方法也应该被模拟',()=>{
常量mockedClassBinInstance=new B();
isMockFunction(mockedClassBinInstance.getAge);
});
});
单元测试结果:

PASS stackoverflow/61596704/a.test.js(8.913s)
61596704
✓ 应通过(3ms)
✓ B的getAge方法也应该模拟(1ms)
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:10.486秒
这里有一个解决方案:

a.js

导出默认A类{
B类;
建造师(B类){
this.classB=classB;
}
getName(){
返回这个.classB.getName();
}
}
b.js

导出默认类别B{
getName(){
返回“来自b的真实姓名”;
}
//稍后添加新方法
getAge(){
返回23;
}
}
a.test.js

从“/A”导入A;
从“/B”导入B;
开玩笑的模仿('./b');
描述('61596704',()=>{
它('应该通过',()=>{
常量mockedClassBinInstance=new B();
mockedClassBinInstance.getName.mockReturnValueOnce('mocked name from b');
常数a=新的a(模拟类实例);
常量实际值=a.getName();
expect(实际).toEqual('b'中的模拟名称');
});
它('B的getAge方法也应该被模拟',()=>{
常量mockedClassBinInstance=new B();
isMockFunction(mockedClassBinInstance.getAge);
});
});
单元测试结果:

PASS stackoverflow/61596704/a.test.js(8.913s)
61596704
✓ 应通过(3ms)
✓ B的getAge方法也应该模拟(1ms)
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:10.486秒

新建A(mockedClassB)有什么问题?还是你在问如何创建一个模拟类be?@BenjaminGruenbaum我在问如何创建
mockedClassB
:)新建A(mockedClassB)有什么问题?还是你在问如何创建模拟类be?@BenjaminGruenbaum我在问如何创建
mockedClassB
:)这是个问题。一旦我向类B添加了一个新方法,我需要返回并更新这个测试调用。我希望有Java的Mockito的等价物,这样我就可以模拟整个类,而不是单独模拟每个类method@Kousha更新的答案,您可以使用
jest.mock()
jest.doMock()
来模拟classYa的所有方法,这是一个问题。一旦我向类B添加了一个新方法,我需要返回并更新这个测试调用。我希望有Java的Mockito的等价物,这样我就可以模拟整个类,而不是单独模拟每个类method@Kousha更新的答案,您可以使用
jest.mock()
jest.doMock()
来模拟类的所有方法