76

次のテスト例では、元のプロバイダー名は 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);
  });

});

より良い説明が欠けている慣習は何ですか?

4

1 に答える 1

109

アンダースコアは、サービスと同じ名前のローカル変数をローカルに割り当てることができるように、別の名前でサービスを注入するために使用できる便利なトリックです。

つまり、これができない場合は、ローカルでサービスに別の名前を使用する必要があります。

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される は、アンダースコアを削除して、必要なモジュールを提供することができます。同じ名前を再利用できるようにする以外は何もません。

Angular ドキュメントで詳細を読む

于 2013-03-10T02:06:15.683 に答える