angular.mock.inject

概要

注意: この関数は簡単にアクセスするためにwindowにも公開されています。

注入用の関数に関数をラップする注入関数です。 inject()は、テスト毎に新しい$injectorのインスタンスを作成し、 参照を解決するのに使用されます。

参照の解決(アンダースコア・ラッピング)

通常、beforeEach()ブロック内に参照を注入したら、複数のit()節でこれを再利用したいと考えるはずです。 これを可能にするために、describe()ブロックのスコープで宣言された変数に、 参照を割り当てなければいけません。 おそらく、変数は参照と同じ名前にしたいと考える可能性が高いため、 inject()関数へのパラメータは外部変数から隠します。(翻訳に自信なし)

これを手助けするために、任意で注入されるパラメータの両端にアンダースコアを付けることが出来ます。 アンダースコアは参照名が解決された際に、インジェクターによって無視されます。

例えば、パラメータ_myService_は、myServiceの参照として解決されます。 関数内部ではmyServiceとして利用可能になるため、 外部スコープ内で定義した変数に割り当てることが可能になります。

// 外部に外部参照する変数を定義
var myService;

// パラメータの両端にアンダースコアを付けます
beforeEach( inject( function(_myService_){
  myService = _myService_;
}));

// 一連のテストでmyServiceを使用
it('makes use of myService', function() {
  myService.doStuff();
});

angular.mock.moduleも確認してください。

下記は、典型的なjasmineのテストで、injectメソッドがどのように使用されるかの例になります。

angular.module('myApplicationModule', [])
    .value('mode', 'app')
    .value('version', 'v1.0.1');


describe('MyApp', function() {

  // テストしたいモジュールを読み込む必要があり、
  // "ng"モジュールだけはデフォルトで読み込まれます。
  beforeEach(module('myApplicationModule'));


  // inject()は、与えられた全ての関数の引数を注入するのに使用されます。
  it('should provide a version', inject(function(mode, version) {
    expect(version).toEqual('v1.0.1');
    expect(mode).toEqual('app');
  }));


  // injectとモジュールのメソッドは、itまたはbeforeEachの内部でも使用することが出来ます。
  it('should override a version and test the new version is injected', function() {
    // module()は、関数または文字列(モジュールのエイリアス)を取ります。
    module(function($provide) {
      $provide.value('version', 'overridden');  //ここでバージョンを上書き
    });

    inject(function(version) {
      expect(version).toEqual('overridden');
    });
  });
});

使用方法

angular.mock.inject(fns);
引数 説明
fns

型:...Function

injectorを使用して注入される、任意の数の関数を指定します。

 Back to top

© 2017 Google
Licensed under the Creative Commons Attribution License 3.0.

このページは、ページトップのリンク先のAngularJS公式ドキュメント内のページを翻訳した内容を基に構成されています。 下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • AngularJSの更新頻度が高いため、元のコンテンツと比べてドキュメントの情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。