#javascript #html #angularjs #unit-testing #jasmine
#javascript #HTML #angularjs #модульное тестирование #jasmine
Вопрос:
Я протестировал свой код на сервере, и он вызовет pinNameEditBlur
корректно, когда я сделаю размытие текстового поля, но здесь он не пройдет модульный тест. Ошибка модульного теста pinNameEditBlur
is не вызывается. Я не знаю, связано ли это с тем, что я использовал неправильный способ эмуляции blur()
.
HTML:
<input type="text" id="edit-pin-name-text-{{pin.id}}" ng-model="editedPinNames[pin.id]" ng-blur="pinNameEditBlur($event, pin)" ng-keydown="pinNameChanged($event, pin)">
Тест:
describe("ng-blur", function(){
it("should call function pinNameEditBlur when the text box is blurred", function(){
var element = document.createElement('div');
document.getElementById = jasmine.createSpy('HTML Element').and.returnValue(element);
var elementId = "edit-pin-name-text-2";
spyOn(scope, 'pinNameEditBlur');
document.getElementById(elementId).blur();
expect(element.classList.contains('blur'));
expect(scope.pinNameEditBlur).toHaveBeenCalled();
});
Ошибка теста:
Mozilla/5.0 (win32) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/11.12.0 PinTable ng-blur should call function pinNameEditBlur when the text box is blurred FAILED
Error: Expected spy pinNameEditBlur to have been called.
at <Jasmine>
at UserContext.<anonymous> (src/test/karma/specs/PinTable.spec.js:276:41)
at <Jasmine>