2016-12-31 4 views
0

AngularJS $リソースサービスがテストのためにmockcedされる方法について混乱しています。 $ httpBackendサービスを使用するには2つの方法があります。 (Pluralsightのチュートリアルから取られた) 片道:

describe('test', function() { 

    beforeEach(module('name')); 

    it('text', inject(function($httpBackend) { 
     $httpBackend.expectGET("/url"); 
     // some code 
     $httpBackend.flush(); 
    }); 
} 

this SO answerからコピーされた)他の方法:

describe('test', function() { 
    var $httpBackend; 
    beforeEach(angular.mock.module('name')); 

    beforeEach(function() { 
     angular.mock.inject(function ($injector) { 
      $httpBackend = $injector.get('$httpBackend'); 
     }) 
    }); 

    describe('text', function() { 
     it('text', inject(function (User) { 
      $httpBackend.expectGET('/url') 
       .respond([{ 
        property: 'test' 
       }]); 

      // Some code 

      $httpBackend.flush(); 
     })); 

    }); 
}); 

最初の方法は、直接のに対しモジュールを使用して、なぜ私は理解していません2番目の方法はです。angular.mock.moduleです。そして、httpBackendサービスは異なった方法で注入されます。 2番目の方法は、はるかに冗長です。最初の方法がうまくいくなら、2番目の方法のすべての冗長な点は何でしょうか?

+0

'module'のは、' angular.mock.moduleのショートカットです'。後者は、CommonJSモジュールとの競合を避けるために使用できます。 'beforeEach'は、同じサービスが複数の仕様で使用されることになっている場合に使用されます。 – estus

+0

ありがとうございます。しかし、_beforeEach_については理解していますが、最初のケースでは_inject(function($ httpBackend)_)を使用するだけでよく、2番目のケースでは_angular.mock.inject(function($ injector)_は中古。 – user5080246

答えて

1

正しい方法はありませんが、ここにはいくつかの懸念事項があります。

moduleは、angular.mock.moduleのショートカットです。後者は、CommonJSモジュールとの競合を避けるために使用できます。

angular.mock.injectが使用された唯一の理由は、angular.mock.moduleと一致していますが、いつでもinjectに短縮することができます。

beforeEach(inject(...))は、同じサービスが複数の仕様で使用されることになっている場合に使用されます。

beforeEach(function() { inject(...) })beforeEach(inject(...))の冗長バージョンです。ブロックbeforeEachinject以外のものがある場合は、可読性のために複数のブロックに分割することを検討してください。

$injector.getは、冗長であり、ここではスタイルや機能の面で利点はありません。サービスが変数である場合、それは良い何もしませんが、それは彼らに何回かを列挙することなく、thisスペックコンテキストにバッチでサービスを割り当てるための有益なパターンが用意されています

beforeEach(inject(function ($injector) { 
    var self = this; 

    ['$httpBackend', ...].forEach(function (depName) { 
    self[depName] = $injector.get(depName); 
    }); 
})); 

it(function() { 
    var self = this; 

    self.$httpBackend... 
}); 
関連する問題