Я пытаюсь написать единичный тест для директивы, которая использует eonasdan-bootstrap-datetimepicker (https://github.com/Eonasdan/bootstrap-datetimepicker). Код для директивы выглядит примерно так:Единичный тест AngularJS DateTimePicker
'use strict';
angular.module('directives')
.directive('datepicker', ['$moment', function ($moment) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attributes, ctrl) {
angular.element(document).ready(function(){
var jElem = $(element);
jElem.datetimepicker({
icons: {
time: "fa fa-clock-o",
date: "fa fa-calendar",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down",
next: "fa fa-arrow-right",
previous: "fa fa-arrow-left"
},
format: 'D MMMM'
});
var picker = jElem.data("DateTimePicker");
ctrl.$parsers.push(function (value) {
var date = $moment(value);
if (date.isValid()) {
return date.format('D/M');
}
return '';
});
$(element).on('dp.change', function (event) {
scope.$apply(function() {
var date = picker.date();
if (date && date.valueOf) {
ctrl.$setViewValue(date.valueOf());
}
});
element[0].blur();
});
});
}
};
}]);
Я пытаюсь получить освещение на мероприятии «dp.change», но я не могу понять, как вызвать событие JQuery. Я пытался сделать что-то вроде этого:
'use strict';
describe('Specs for datepicker', function()
{
var scope;
var $compile;
var form;
beforeEach(module('directives'));
beforeEach(inject(function($rootScope, _$compile_) {
$compile = _$compile_;
scope = $rootScope.$new();
var html = "<form name='test_form'"+
" novalidate>"+
"<fieldset>"+
"<input type='text' "+
"ng-model='dt' "+
"datepicker "+
"class='form-control date' "+
"name='date' "+
"value=''/>"+
"</fieldset>"+
"</form>"
form = $compile(angular.element(html))(scope);
scope.$digest();
}))
it('should react to dp.change', function()
{
scope.test_form.date.$setViewValue('1 Jan');
scope.$digest();
var element = $(form).find('input');
var dp = $(element.find('datepicker'));
dp.triggerHandler(new $.Event('dp.change'));
scope.$digest();
expect(scope.dt).toEqual('1/1');
});
});
Я перепробовал кучу других вещей, но ничего не получает мне освещение внутри обработчика. Любые предложения, как это исправить?