使用Jasmine进行单元测试时,如何在没有“子要求”的情况下要求文件?

时间:2016-11-18 01:16:45

标签: javascript unit-testing mocking jasmine

让我们在我的规范中说我写了以下内容,

const moduleA = require('moduleA');

...在moduleA中,它需要另一个模块,例如'moduleB'

在我看来,单元测试应该是独立的,并且应该模拟所有依赖项。但是我找不到一个好的方法来同时需要moduleA而不需要moduleB。

有关如何做到这一点的任何建议?提前谢谢。

我尝试过的事情: rewirejs(https://github.com/jhnns/rewire),这看起来不错,但在你真正替换moduleB之前仍需要moduleB

1 个答案:

答案 0 :(得分:0)

您可以让您的模块导出一个函数,该函数将依赖项作为参数(而不是要求它)。所以你会:

/*moduleA*/
module.export = function(depB){
    /*your code here*/
});

当你导入moduleA时,你会这样做:

var moduleB = require('moduleB');
var moduleA = require('moduleA')(moduleB);

另一种方法是将依赖树传递给子模块:

const platform = {
     moduleA : require('moduleA'),
     moduleB : require('moduleB'),
}

var moduleA = platform.moduleA(platform);

moduleA

module.export = function(platform){
    var moduleB = platform.moduleB; //your dependency here
    //for consistency you'd also want to export a function that takes the depdency tree even if it doesnt take a dependency (so module configuration remains consistent across all your modules)
}

以这种方式替换模拟的依赖项非常容易。主题herehere还有更多内容。