1. ホーム
  2. angularjs

AngularJSのテストで_servicename_のアンダースコアは何を意味するのですか?

2023-10-20 14:11:25

質問

以下のテスト例では、オリジナルのプロバイダ名は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 はアンダースコアを取り除くだけで、私たちが望むモジュールを提供することができます。これは は行いません。 をするのではなく、同じ名前を再利用できるようにするのです。

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