6

少し前にGoogleで見つけた構文を使用して、いくつかのAngularコンポーネントのテストを書いています:

 describe('Directive: myDir', function () {
     beforeEach(module('myApp'));
     beforeEach(module('app/views/my_template.html'));
     beforeEach(inject(function ($rootScope, _$compile_, $templateCache) {
         $templateCache.put('views/my_template.html', $templateCache.get('app/views/my_template.html'));

         var scope, $compile;
         scope = $rootScope;
         $compile = _$compile_;
         element = angular.element("<div my-dir class='my-dir'></div>");
     }));

     it('does things', function () {
         $compile(element)(scope);
         scope.$digest();
     });
 });

私の質問は、具体的には の注入に関するもの_$compile_です。だけとどう違うの$compile?なぜこのようにする必要があるのでしょうか。$compile が再定義されるのはなぜですか? 挿入した $compile で単純にコンパイルできないのはなぜですか?

4

1 に答える 1

12

Angular の公式チュートリアル(テスト セクション)から:

インジェクターは、ここで先頭と末尾のアンダースコアを無視します (つまり、$httpBackend )。これにより、サービスを注入できますが、サービスと同じ名前の変数にアタッチできます。

あなたの例では、変数の名前を次のように変更して$compileからcompile、パラメーター名からアンダースコアを削除できます。実際、あなたはそれを行ったscopeので、$rootScopeアンダースコアはありませんでした.

個人的には、Angular の組み込みサービスの名前をテストに残しておきたいので、コードにざっと目を通しているときに簡単に見つけることができます。

于 2013-08-01T04:43:22.753 に答える