5

ho scritto test per alcuni componenti angolari, utilizzando una sintassi che ho trovato su google qualche tempo fa:significato di sottolineatura su iniettabili in angolare

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

La mia domanda è specificamente circa l'iniezione di _$compile_. Com'è diverso dal solo $compile. Perché dovrei aver bisogno di farlo in questo modo? Perché la $ compilazione viene ridefinita, perché non posso semplicemente compilare con una compilazione $ che inserisco?

risposta

12

Dalla (sezione Test) Angular official tutorial:

L'iniettore ignora iniziali e finali sottolinea qui (cioè $ httpBackend). Questo ci consente di iniettare un servizio, ma poi collegarlo a una variabile con lo stesso nome del servizio.

Nel tuo esempio, si potrebbe rinominare la variabile $compile come, ad esempio, compile e quindi rimuovere le sottolineature dal nome del parametro. In effetti, l'hai fatto a scope così $rootScope è rimasto senza sottolineatura.

Personalmente mi piace mantenere il nome dei servizi integrati Angular nei miei test in modo che possano essere facilmente individuati mentre si sfoglia il codice.

+0

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

Problemi correlati