6

W jaki sposób mogę testować dyrektywy urządzenia korzystające z szablonu TemplateUrl do ładowania szablonów?Testowanie dyrektyw korzystających z szablonów

Ponieważ $ httpBackend jest próbą, to nie załaduje szablonów. chciałbym móc używać coś jak

$httpBackend.whenGET(/^\/views\//).passThrough(); 

i niech to rzeczywiście dostać szablony, ale nie zorientowali się, jak to zrobić poprawnie.

Wydaje mi się, że mam pewne niejasności odnośnie do dyrektyw dotyczących testów jednostkowych. Nota prawna: Nie mam doświadczenia w testowaniu ani używania jaśminu ani testów.

Każda pomoc jest doceniana.

Odpowiedz

4

Dzięki pkozlowski.opensource za doprowadzenie mnie we właściwym kierunku!

Dla każdego, zastanawiając się, jak mogę rozwiązać go:

  1. Dodaj https://npmjs.org/package/grunt-angular-templates do projektu.
  2. Dodaj zadanie gruntowania, aby skompilować wszystkie szablony do pliku js.

Ten plik JS zarejestruje teraz moduł (nazwa może zostać skonfigurowana w pliku gruntowym).

We wszystkich testach zależnych od szablonów należy załadować ten moduł.

Przykład testu:

'use strict'; 

describe('Component: comments', function() { 
    beforeEach(module('studentportalenApp'), module('app.templates')); 

    var element; 

    it('should render an error message if type is not recognized', inject(function($rootScope, $compile) { 
    element = angular.element('<comments></comments>'); 
    element = $compile(element)($rootScope); 
    expect(element.html()).toBe('Comments directive type not recognized.'); 
    })); 
}); 

Należy uważać, aby dostać swoje poglądy używając dokładnie tej samej zawartości, jak określono w module app.templates. To znaczy./views /, a nie views /, albo nie będzie się dopasowywać do ścieżek pamięci podręcznej szablonów i ognia żądania w każdym razie.

+0

Pomogło to! Potrzebowałem jeszcze jednej rzeczy, aby to działało, i to było wywołanie '$ rootScope. $ Digest()' po kroku '$ compile'. Bez tego test nie dostrzeże żadnej zawartości w elemencie. – Dave

8

IMO najprostszym sposobem na przetestowanie dyrektyw zależnych od szablonów (z odniesieniem do templateUrl) jest umieszczenie tych szablonów z góry na przedniej ściance $templateCache. Zwykle odbywa się to przez proces budowania.

Więcej szczegółów: każdy znacznik szablonu jest konwertowany na kod JavaScript i wstawiany do $templateCache. Generowany jest również moduł AngularJS (z nazwą modułu będącego ścieżką do szablonu).

Stosując tę ​​technikę, mamy do czynienia tylko z plikami JavaScript i nie musimy kpić z żadnych połączeń HTTP. Minusem jest to, że potrzebujesz dodatkowego kroku kompilacji.

wierzę, że pierwotnie technika ta została spopularyzowana przez doskonałą repozytorium przez Vojta Jina: https://github.com/vojtajina/ng-directive-testing gdzie można zobaczyć szablony przygotowanie here i rzeczywista próba przedstawieniu moduł z szablonem napięcia wstępnego here.

+0

Dziękuję bardzo za ustawienie mnie na właściwej ścieżce! Po wprowadzeniu znalazłem to zadanie pomruczania, które pomogło mi skompilować szablony w JS. Link: https://npmjs.org/package/grunt-angular-templates –

Powiązane problemy