使用Jasmine进行单元测试时,javascript显示模块模式的缺点是什么?
有什么潜在的解决方法?
答案 0 :(得分:4)
我正在使用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);
})
})
答案 1 :(得分:1)
可以这样试试
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
编写测试。有关更多信息,请阅读此blog post
答案 2 :(得分:1)
基本上,当您想要对模块进行单元测试时(不管使用的测试运行器),主要的警告是内部函数的范围。也就是说,内在的方法;或者如果你将私人方法;无法从模块外部访问。因此,如何对这些方法进行单元测试并不是很明显;当然,这仅适用于您要对私有方法进行单元测试的情况。
我写了一篇博客文章,描述了这个问题并提出了解决方案。
http://tech.pro/blog/1792/how-to-unit-test-private-functions-in-the-revealing-module-pattern