Jasmineで単体テストを行うときのjavascriptの明らかにモジュールパターンの欠点は何ですか?
そして、潜在的な回避策は何ですか?
Jasmineで単体テストを行うときのjavascriptの明らかにモジュールパターンの欠点は何ですか?
そして、潜在的な回避策は何ですか?
モジュールパターンの特別な種類であるrequireJSを1年以上使用していますが、欠点は見られません。モジュールは依存性注入を使用する必要があるため、テストでモジュールの依存性をモックに置き換えることができます。
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