使用Jasmine进行单元测试时,javascript显示模块模式的缺点是什么?

时间:2013-07-18 05:42:30

标签: javascript unit-testing jasmine

使用Jasmine进行单元测试时,javascript显示模块模式的缺点是什么?

有什么潜在的解决方法?

3 个答案:

答案 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