2013-05-03 17 views
6

My <custom-directive> ha e template: '<img />'. Come posso scrivere un test unitario per questo? Penso di voler testare che in realtà sostituisce la direttiva personalizzata con img.AngularJS testare una direttiva con replace impostato su true

it('should be transformed to <img>', function(){ 
    var elm = $compile('<custom-directive></custom-directive>')(scope); 
    scope.$digest(); 

    var t = elm.find('img'); // wrong! it replaces the element. it won't find another one inside 
//expect(elm).toBeAnImgElement ? 
}); 

Non riesco a trovare l'elemento di corrispondenza corretto. Il caso più vicino che ho visto è il controllo dei contenuti (elm.html() o elm.text()) ma il mio tag è vuoto.

risposta

18

avvolgere la direttiva in un div come:

describe('Directive: custom', function() { 
    beforeEach(module('App')); 

    var element, $scope; 

    it('should be transformed to <img>', inject(function ($rootScope, $compile) { 
    $scope = $rootScope.$new(); 
    element = angular.element('<div><custom-directive></custom-directive></div>'); 
    element = $compile(element)($scope); 

    expect(element.children('img').length).toBe(1); 
    })); 
}); 
+0

Perché abbiamo bisogno di '$ rootScope $ digest();' qui.? In effetti, non funziona senza di esso, ma non capisco perché. – thorn

+0

@thorn: Sì, non è necessario. – codef0rmer

+0

No, lo è. Come ho scritto, non funziona senza di esso. – thorn

3

È possibile ottenere l'oggetto HTMLElement effettivo e controllarne il nome. Arrivare al vero e proprio con HTMLElement elm[0]:

expect(elm[0].tagName).toEqual('A'); 
Problemi correlati