让我们在我的规范中说我写了以下内容,
const moduleA = require('moduleA');
...在moduleA中,它需要另一个模块,例如'moduleB'
在我看来,单元测试应该是独立的,并且应该模拟所有依赖项。但是我找不到一个好的方法来同时需要moduleA而不需要moduleB。
有关如何做到这一点的任何建议?提前谢谢。
我尝试过的事情: rewirejs(https://github.com/jhnns/rewire),这看起来不错,但在你真正替换moduleB之前仍需要moduleB
答案 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)
}