【问题标题】:NodeJS: Unit Test for class calling constructor and functions of another classNodeJS:类调用构造函数和另一个类的函数的单元测试
【发布时间】:2020-11-19 08:02:52
【问题描述】:

我需要为以下 A 类编写单元测试。我不想测试 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();

有没有更好的方法来实现我的目标?

谢谢!

【问题讨论】:

  • 如果您确实想在不更改/不更改的情况下测试代码,这就是您要走的路。或者,您可以通过允许依赖注入 function a(B = classB) { const b = new B(); ...} 使您的代码更具单元测试性

标签: node.js unit-testing rewire


【解决方案1】:

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

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

function a(b) {
  b.methodA();
}

// test file
const b = { 
  methodA() {
    console.log('stubbed methodA');
  } 
}
a(b);

这样可以更好的保证测试用例之间测试替身的隔离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 2012-06-22
    • 2014-08-01
    • 1970-01-01
    • 2020-11-07
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多