用 Jasmine 进行单元测试时,javascript 的显示模块模式有什么缺点?
潜在的解决方法是什么?
我正在使用 requireJS,这是一种特殊的模块模式,已经使用了一年多,看不到任何缺点。你的模块应该使用依赖注入,这样你就可以在测试中用模拟替换模块的依赖。
var myModule = (function(dep1){
function someFancyAlgorythm(a){return a +1}
return {
foo: function(a){
dep1(someFancyAlgorythm(a))
}
}
})(dep1)
在你的测试中
describe('myModule',function(){
var dep1;
var module;
beforeEach(function(){
dep1 = jasmine.createSpy();
module = myModule(dep1)
})
it('make crazy stuff', function(){
module.foo(1);
expect(dep1).toHaveBeenCalledWith(2);
})
})
可以试试这个方法
var module = (function() {
var priv = function(){
};
var pub = function(){
};
/**start-private-test**/
pub._priv = priv ;
/**end-private-test**/
return {
pub : pub
}
}();
pub._priv
为和生产删除代码单元编写测试private-test
。有关更多信息,请阅读此博客文章
基本上,当您想要对模块进行单元测试时(无论使用什么测试运行器),主要的警告是内部函数的范围。即内部方法;或者如果你想要私有方法;无法从模块外部访问。因此,如何对这些方法进行单元测试并不是很明显。当然,这仅适用于您想要对私有方法进行单元测试的情况。
我写了一篇博客文章,描述了这个问题并提出了解决方案。
http://tech.pro/blog/1792/how-to-unit-test-private-functions-in-the-revealing-module-pattern