5

Pisałem testy dla niektórych kątowe elementów, używając składni, które znalazłem na google jakiś czas temu:znaczenie podkreślenia na zastrzyki w kątowym

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(); 
    }); 
}); 

Moje pytanie brzmi konkretnie o wstrzyknięciu _$compile_. Czym różni się od wersji $compile. Dlaczego miałbym to robić w ten sposób? Dlaczego zmieniono $ compile, dlaczego nie mogę po prostu skompilować kompilacji $ compile I?

Odpowiedz

12

Z (części testu) Angular official tutorial:

Wtryskiwacz ignoruje początkowe i końcowe podkreśla tutaj (tzn $ httpBackend). Dzięki temu możemy wstrzyknąć usługę, ale następnie dołączyć ją do zmiennej o tej samej nazwie, co usługa.

W przykładzie, można zmienić nazwę zmiennej $compile jak, powiedzmy, compile a następnie usunąć podkreślenia od nazwy parametru. W rzeczywistości zrobiłeś to pod scope, więc $rootScope pozostało niewymierne.

Osobiście lubię zachować nazwę wbudowanych usług Angular w moich testach, aby można je było łatwo zauważyć podczas przeglądania kodu.

+0

https://docs.angularjs.org/api/ngMock/function/angular.mock.inject#resolving-references-underscore-wrapping- – gregjhogan