假设我有一个 RequireJS 模块,并且我的应用程序中只有一个实例(假设它执行异步操作并传递了回调):
// modules/myModule
define(function(){
var module = function(){
var self = this;
self.runSomething(){
console.log("hello world");
};
};
return new module();
});
我想对这个模块的一个实例进行单元测试,我发现自己是用这种方式构建模块的:
// modules/myModule
define(function(){
return function(){
var self = this;
self.runRouting(){
console.log("hello world");
};
};
});
// modules/myModuleInstance
define(["modules/myModule"], function(myModule){
return new myModule();
});
这为我提供了一些没有附加状态的东西,然后我可以从我的单元测试中戳出来,所以在我的单元测试中我从不引用modules/myModuleInstance
, only modules/myModule
,我每次为每个测试构建它。该应用程序然后引用modules/myModuleInstance
.
这感觉像是一种反模式。我讨厌在那里有额外的“模块实例”部分。我知道单元测试中的设置和拆卸方法,并且可以通过这种方式维护实例,但是在尝试对大量单例进行单元测试时目睹了 C# 会发生什么,我真的想避免在单元测试之间摆弄状态,尤其是用动态的语言。
在这种情况下,人们通常会怎么做?