次のテスト例では、元のプロバイダー名はAPIEndpointProviderですが、インジェクションとサービスのインスタンス化では、アンダースコアでラッピングされた規則をインジェクトする必要があるようです。何故ですか?
'use strict';
describe('Provider: APIEndpointProvider', function () {
beforeEach(module('myApp.providers'));
var APIEndpointProvider;
beforeEach(inject(function(_APIEndpointProvider_) {
APIEndpointProvider = _APIEndpointProvider_;
}));
it('should do something', function () {
expect(!!APIEndpointProvider).toBe(true);
});
});
私がより良い説明を逃しているコンベンションは何ですか?
下線は、サービスと同じ名前のローカル変数をローカルに割り当てることができるように、別の名前でサービスを挿入するために使用できる便利なトリックです。
つまり、これを実行できなかった場合、サービスに他の名前をローカルで使用する必要があります。
beforeEach(inject(function(APIEndpointProvider) {
AEP = APIEndpointProvider; // <-- we can't use the same name!
}));
it('should do something', function () {
expect(!!AEP).toBe(true); // <-- this is more confusing
});
$injector
テストで使用すると、アンダースコアを削除するだけで、必要なモジュールが得られます。同じ名前を再利用できることを除いて、何もしませんdo.