Я хочу программно снять флажок в Жасмин тестах.Вот шаблон компонента HTML:
<input type="checkbox" ng-model="$ctrl.doNotShowAgain" ng-click="$ctrl.checkboxClicked()">
есть действительно простой класс контроллера:
import WelcomeService from './welcome.service';
import './welcome.scss';
const template = require('./welcome.html');
class WelcomeComponent {
doNotShowAgain: boolean;
static get $inject() {
return ['WelcomeService'];
}
constructor(private welcomeService: WelcomeService) {}
checkboxClicked() {
if (this.doNotShowAgain) {
this.welcomeService.doNotShowWelcomeModalAgain();
} else {
this.welcomeService.showWelcomeModalAgain();
}
}
}
export default {
template,
controller: WelcomeComponent
};
и его простое определение компонента:
import welcomeComponent from '../welcome/welcome.component';
angular.module('xyz',[]).component('welcome', welcomeComponent)
Имея это яесть действительно простой файл модульного теста welcome.component.spec.js
describe('Welcome Component', function() {
......
beforeEach(function() {
spyOn(welcomeService, 'doNotShowWelcomeModalAgain');
spyOn(welcomeService, 'showWelcomeModalAgain');
component = $compile('<welcome></welcome>')($scope);
$scope.$digest();
});
it('should invoke welcomeService.doNotShowWelcomeModalAgain', function() {
const checkbox = angular.element(component[0].querySelector('input'));
checkbox.triggerHandler('click');
$scope.$digest();
expect(welcomeService.doNotShowWelcomeModalAgain).toHaveBeenCalled();
expect(welcomeService.showWelcomeModalAgain).not.toHaveBeenCalled();
});
});
Вышеупомянутый тест пройден в AngularJS 1.6.X, но после перехода на 1.7.8 он начинает давать сбой.Проблемная строка - checkbox.triggerHandler ('click');который, кажется, не вызывает функцию checkboxClicked () вообще.Я пробовал другие вещи, как показано ниже, но безуспешно.
checkbox.attr('checked', 'checked');
checkbox.prop('checked', true);
checkbox.triggerHandler('click');
checkbox.triggerHandler('change');
Я знаю обходной путь для непосредственного изменения переменной doNotShowAgain в контроллере, но я бы хотел вместо этого протестировать взаимодействие между контроллером, моделью и представлением вместо тестирования только контроллера.
Заранее спасибо