2

シナリオ

私は現在、Angular プロジェクトのテストを書いています。私が見つけたほぼすべての記事で、次のように、テストで使用される依存関係を格納するブロックに「グローバル」変数を作成しているのを目にします。describe

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() {
        // ...
    })
})

テストで使用するために、サービス/ファクトリ/などの新しいインスタンスを作成して共有するため、これは非常に乾燥していることがわかりました。しかし、多くのテストを書いているとき、私はグローバルを作成し、その後それらを使用しなくなり、inject()このトレースを残す際にグローバルを削除するのを忘れていることに気づきました。これは、後で混乱を引き起こす可能性があります。

私の混乱

そのため、各テスト ケースに依存関係を注入してから、次のように小さな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ブロック内ではなく、テストごとに依存関係を注入することに問題はありますか?

4

1 に答える 1

1

いいえ、同じファイルを複数回ロードする必要があるため、要件に応じて依存関係を追加できるという問題はありません。唯一の問題は効率です。この問題は、少量のテスト ケースを作成する場合は大したことではありませんが、より多くのテスト ケースを作成し始めると、最終的に速度が低下します。さらに、毎回挿入するモジュールは他のモジュールに依存している可能性があるため、それらのモジュールをメモリにロードする必要があります。そのため、これらの値をグローバル変数として使用することをお勧めします。

于 2016-08-04T06:21:08.783 に答える