Node.js NodeJS:调用另一个类的构造函数和函数的类的单元测试

Node.js NodeJS:调用另一个类的构造函数和函数的类的单元测试,node.js,unit-testing,rewire,Node.js,Unit Testing,Rewire,我需要为下面的classA编写一个单元测试。我不想测试methodA,而是设置一个虚拟方法: const classB = require('classB'); function a() { const b = classB(); b.methodA(); } 我试着使用“重新布线”: const classA = rewire('classA'); const classBMock = require('classB'); classBMock.prototype.methodA =

我需要为下面的classA编写一个单元测试。我不想测试methodA,而是设置一个虚拟方法:

const classB = require('classB');
function a() {
  const b = classB();
  b.methodA();
}
我试着使用“重新布线”:

const classA = rewire('classA');
const classBMock = require('classB');
classBMock.prototype.methodA = function() {
}
classA.__set__('classB', classBMock);
classA.a();
有没有更好的方法来实现我的目标


谢谢

你做得对。使用
重新布线
包,设置模拟的
classB
对象。但不建议在原型上使用模拟方法覆盖该方法。您必须在执行测试用例后将其恢复到原始状态。否则,使用模拟的
methodA
classB
可能会导致其他测试失败

更好的方法是使用依赖项注入。为每个测试用例创建模拟的
classB
对象,并将其传递到
a
函数中,如下所示:

功能a(b){
b、 方法a();
}
//测试文件
常数b={
方法a(){
log('stubbed methodA');
} 
}
a(b);

这可以更好地确保测试用例之间的测试隔离。

如果您确实希望测试不发生更改的代码,这是一种方法。或者,通过允许依赖项注入
函数a(B=classB){const B=new B();…}