2016-12-21 13 views
0

私はこのように私の角工場を持っている:(this.functionを呼び出すの差)と機能()アンギュラ工場で

angular 
    .module('app.myModule') 
    .factory('myFactory', myFactory); 

myFactory.$inject = []; 

function myFactory() { 

    var factory = { 
     func1: func1, 
     func2: func2 
    }; 

    return factory; 

    ////////// 

    function func1() { 
     if (/* some condition */) { 
      return true; 
     } else { 
      return false; 
     } 
    }; 

    function func2() { 
     if (func1()) { 
      // do something 
     } else { 
      // do something else 
     } 
    }; 

}; 

func2()func1を呼び出した結果に応じて、何かをしますが、func1()ではありませんそれを私に公開するのは面白いので私的な機能です。

私はこの工場の単体テストをコード化するまでは何も問題ありませんでした。 func2()をテストするときは、いつでもを返信してtrue/falseと返信したいと思います。

は、これまでのところ私は、テストコード化:

describe('Test func2 if func1 returns false', function() { 

    beforeEach(function() { 
     // func1 stub setup 
     sinon.stub(myFactory, 'func1'); 
     myFactory.func1.returns(false); 

     // HERE myFactory.func1() RETURNS 'false' 
    }); 

    it('should do something else', function (done) { 
     // HERE func1() CALLED INSIDE myFactory.func2() IS NOT THE STUB 

     myFactory.func2(); 

     // Do some assertions, etc. 
    }); 

}); 

を私は気づいた私はthis.func1()を呼び出す代わりに、このようなfunc1()によってmyFactoryのfunc2()コードの小さな変化をした場合:それから

function func2() { 
    if (this.func1()) { 
     // do something 
    } else { 
     // do something else 
    } 
}; 

スタブされたfunc1()関数が常にテストで呼び出されます。

この時点で私はちょうど混乱しています。誰がここで何が起こっているかも知っていますか?同じ工場に属している場合は、私の角の工場内の他の公共の方法/機能をthis.と呼ぶ方がより正確でしょうか?

UPDATE

this.func1()またはfactory.func1()仕事の両方。

+0

これはAngularJS質問より一般的です。このカップルの動画をご覧ください:https://www.youtube.com/playlist?list=PLoYCgNOIyGABI011EYc-avPOsk1YsMUe_ – tomepejo

答えて

0

JS OOPのベストプラクティスでは、func1を非字句のthisでコールバックすると想定される場合には、factory.func1が好ましいと示唆しています。そうでなければthis.func1を使用することができます。

ユニットテストのコンテキストでは、特定の機能やオブジェクトにハードコードされていないため、this.func1が最適です。

アンギュラの工場サービスthis.func1factory.func1のテストでは、ほぼ同等です。

関連する問題