0

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

潜在的解决方法是什么?

4

3 回答 3

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);
  })
})
于 2013-07-18T15:37:18.917 回答
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。有关更多信息,请阅读此博客文章

于 2013-07-18T06:14:42.190 回答
1

基本上,当您想要对模块进行单元测试时(无论使用什么测试运行器),主要的警告是内部函数的范围。即内部方法;或者如果你想要私有方法;无法从模块外部访问。因此,如何对这些方法进行单元测试并不是很明显。当然,这仅适用于您想要对私有方法进行单元测试的情况。

我写了一篇博客文章,描述了这个问题并提出了解决方案。

http://tech.pro/blog/1792/how-to-unit-test-private-functions-in-the-revealing-module-pattern

于 2013-12-24T11:50:25.550 回答