2016-06-17 3 views
1

Я начинаю с Кармы и Жасмина, и у меня есть проблема.Как проверить элемент вида в угловом с кармой и жасмином?

Html:

<input id="dateTimePicker" ng-change="vm.enableConfirm = vm.matchDate == null" ng-click="vm.openCalendar($event, prop)" type="text" datetime-picker="dd MM yyyy HH:mm" ng-model="vm.matchDate" is-open="vm.isOpen" /> 

Я хочу, чтобы проверить, если календарь открывается, когда нг-клик выполняется.

код контроллера:

vm.openCalendar = function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    vm.isOpen = true; 
}; 

Spec.js:

... 
it('Check if openCalendar opens the calendar', function() { 
     angular.element(document.querySelectorAll('#dateTimePicker')).triggerHandler('click'); 
     controller.openCalendar(); 
     //nothing yet 
    }); 
... 

Я получаю ошибку, что openCalendar не получает параметр события. Как правильно проверить эту функцию контроллера?

ответ

0

Это одно и то же для любой функции, которая ожидает насмешливые аргументы, а не только обработчик событий.

В одном из спецификации controller.openCalendar тестируется:

var e = { 
    preventDefault: jasmine.createSpy(), 
    stopPropagation: jasmine.createSpy() 
}; 

controller.openCalendar(e); 

expect(e.preventDefault).toHaveBeenCalled(); 
expect(e.stopPropagation).toHaveBeenCalled(); 
expect(controller.isOpen).toBe(true); 

В другой спецификации вид испытан с загасило controller.openCalendar:

spyOn(controller, 'openCalendar'); 
element.click(); 
expect(controller.openCalendar).toHaveBeenCalledWith(jasmine.any(Object), ...); 

Где element является input элементом, который был собран с $compile. В тестах элементы DOM отсоединяются и недоступны для document.querySelectorAll.

+0

и как это сделать, чтобы календарь был открыт в представлении? –

+0

Не следует. Единичные тесты должны выполняться изолированно. Я обновил ответ, чтобы сделать его более понятным. Все поведение можно протестировать в тесте Protractor e2e, но в модульных тестах (Karma) мы тестируем их отдельно, строчно. – estus