2016-08-04 7 views
2

シナリオ

私は現在、角度のプロジェクトのためのテストを書いている、と彼らはで使用される依存関係を保管場所にはほとんど私が見つけるすべての記事に、私は、彼らがdescribeブロックに「グローバル」変数の作成を参照してください。このようなテスト、:Angularjs ngMockは、各テストの前に、または各テストケースに注入しますか?

describe('Some tests', function() { 
    var $controller, $rootScope 

    beforeEach(angular.mock.module('myApp')) 
    beforeEach(angular.mock.inject(function(_$controller_, _$rootScope_) { 
     $controller = _$controller_ 
     $rootScope = _$rootScope_ 
    })) 

    it('uses $controller inside', function() { 
     // ... 
    }) 
    it('uses $rootScope inside', function() { 
     // ... 
    }) 
}) 

それは、使用するテストのために...サービス/工場/などの新しいインスタンスを作成し、共有するので、私はこれはDRYのverであることがわかってきました。しかし、たくさんのテストを書くときには、グローバルを作成して使用しなくなったことに気付きました。そして、このトレースを残して、それらを削除して、ラインを混乱させる可能性があります。

は、だから私は、各テストケースの依存関係を注入してきたし、このように、手に負えませんグローバルに小さなdescribeブロックにリファクタリング私の混乱:

describe('Some tests', function() { 
    beforeEach(angular.mock.module('myApp')) 

    it('uses $controller inside', angular.mock.inject(function($controller) { 
     // Test using the $controller 
    })) 
    it('uses $rootScope inside', angular.mock.inject(function($rootScope) { 
     // Test using $rootScope 
    })) 
}) 

そして、これはローカルに滞在し、どこから来ているのか検索する必要のある変数を使用する必要がないという利点があります。

質問

beforeEachブロックテストごとの代わりに、内部の依存関係を注入する上の任意の問題がありますか?

答えて

1

いいえこのような問題はありません。要件に応じて依存性を追加することはできますが、唯一の問題は同じファイルを複数回読み込む必要があるためです。この問題は少量のテストケースを書くときには大したことではありませんが、より多くのテストケースを書き始めると、最終的には減速します。さらに、毎回注入しているモジュールは他のモジュールに依存しているので、それらのモジュールをメモリにロードする必要があります。そのため、これらの値をグローバル変数として使用することをお勧めします。

関連する問題