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()
来模拟类的所有方法