2015-05-19 2 views
1

Я создал директиву, которая прослушивает событие и обновляет его содержание следующим образом:Модульного тестирования angularjs директива прислушиваясь к событию

$rootScope.$on(event, function(e, msg) { 
    vm.items = msg.data; 
}); 

Я хотел создать модульный тест для этого, я знаю, как я могу проверить если директива вещает, но я не знаю, как проверять эту директиву.

Вот как я могу проверить, если директива слушает:

describe('input directive', function() { 
    var ctrl, 
     $rootScope; 
    beforeEach(function() { 
    module('hey.ui'); 
    inject(function($compile, _$rootScope_) { 
     $rootScope = _$rootScope_; 
     var elem = $compile('<m-search></m-search>')($rootScope.$new()); 
     $rootScope.$digest(); 

     ctrl = elem.controller('mSearch'); 

     spyOn($rootScope, '$broadcast'); 
    }) 
    }); 

    it('broadcasts e:input-valuechanged on change', function() { 
    var inputVal = {input: 'input string'}; 
    ctrl.onChange(inputVal); 
    expect($rootScope.$broadcast).toHaveBeenCalledWith('e:input-valuechanged', {data: inputVal}); 
    }); 

}); 

Я думал очень глупый способ тестирования, например, так:

describe('list directive', function() { 
    var ctrl, 
     $rootScope; 
    beforeEach(function() { 
    module('hey.ui'); 
    inject(function($compile, _$rootScope_) { 
     $rootScope = _$rootScope_; 
     var elem = $compile('<ecal-list></ecal-list>')($rootScope.$new()); 
     $rootScope.$digest(); 

     ctrl = elem.controller('mList'); 

     spyOn($rootScope, '$broadcast'); 
    }) 
    }); 

    it('should listen to $broadcast', function() { 

    $rootScope.$broadcast('e:input-valuechanged'); 

    var eventEmitted = false; 
    $rootScope.$on('e:input-valuechanged', function() { 
     eventEmitted = true; 
     console.log(eventEmitted); 
    }); 
    //run code to test 
    expect(eventEmitted).toBe(true); 
    }); 
}); 

Как проверить, если директива слушает конкретное событие?

ответ

0

Я считаю, что вы хотите слушать событие e:input-valuechanged перед трансляцией;

it('should listen to $broadcast', function() { 

    var eventEmitted = false; 
    $rootScope.$on('e:input-valuechanged', function() { 
    eventEmitted = true; 
    console.log(eventEmitted); 
    }); 

    $rootScope.$broadcast('e:input-valuechanged'); 

    //run code to test 
    expect(eventEmitted).toBe(true); 
}); 
Смежные вопросы