sen*_*ett 6 javascript unit-testing design-patterns requirejs
假设我有一个RequireJS模块,并且我的应用程序中只有一个实例(假设它执行异步操作并将回调传递给它):
// modules/myModule
define(function(){
var module = function(){
var self = this;
self.runSomething(){
console.log("hello world");
};
};
return new module();
});
Run Code Online (Sandbox Code Playgroud)
我想单元测试这个模块的一个实例,我发现自己用这种方式构建模块:
// 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();
});
Run Code Online (Sandbox Code Playgroud)
这为我提供了一些没有附加状态的东西,然后我可以从我的单元测试中找到它,所以在我的单元测试中,我从不参考modules/myModuleInstance,只是modules/myModule每次为每次测试构建的.该应用程序然后引用modules/myModuleInstance.
这感觉就像一个反模式.我讨厌在那里有额外的"模块实例"部分.我知道单元测试中的设置和拆卸方法,并且可以通过这种方式维护实例,但是在尝试对大量单例进行单元测试时,目睹了C#会发生什么,在单元测试之间摆弄状态是我真正想要避免的,特别是用动态语言.
在这种情况下人们通常会做什么?
根据 Luke McGregor 的评论,很明显我在第一个代码片段中的内容很好。使用testr.js我可以定义一个运行测试的模块,如下所示:
// tests/myModuleTests
define(["modules/myModule"], function(myModule){
var instanceOfModule = testr(myModule);
// run some tests
var anotherInstanceOfModule = testr(myModule);
// run some other tests
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |