Я получаю эту постоянную ошибку, когда пытаюсь запустить этот тестовый пример, где я запускаю модальное нажатие, которое должно вызывать метод "enabled". Модал создается при вызове его директивой атрибута, поэтому при втором щелчке я использую параметры документа вместо debugElement.
Это компонент html
<div *ngIf="id" class="mt-3">
<button *ngIf="status" class="egbx-btn egbx-btn-danger" nz-button nzType="danger" egbxModal
nzTitle="{{ 'BTN_DISABLE.Mensajes.TITLE' | translate }}"
nzContent="{{ 'BTN_DISABLE.Mensajes.CONTENT' | translate }}"
(handleOK) ="disabled()">
{{ 'BTN_DISABLE.Label' | translate }}
</button>
<button *ngIf="!status" class="egbx-btn egbx-btn-success"nz-button nzType="primary" egbxModal
nzTitle="{{ 'BTN_ENABLE.Mensajes.TITLE' | translate }}"
nzContent="{{ 'BTN_ENABLE.Mensajes.CONTENT' | translate }}"
(handleOK) ="enabled()">
{{ 'BTN_ENABLE.Label' | translate }}
</button>
</div>
Это компонент
@Component({
selector: 'updater-state',
templateUrl: './updater-state.component.html'
})
export class UpdaterStateComponent implements OnInit {
@Input() id: Guid;
@Input() status: boolean;
@Output() hanldeChangeStatus = new EventEmitter<boolean>();
constructor() { }
ngOnInit() {
}
disabled() {
this.hanldeChangeStatus.emit(false);
}
enabled() {
this.hanldeChangeStatus.emit(true);
}
}
И это тестовый пример, где fixture = TestBed.createComponent(UpdaterStateComponent);
и component = fixture.componentInstance;
it('Enabled_toHaveBeenCalled', fakeAsync(() => {
let mockStatus: boolean = false;
component.status = mockStatus;
fixture.detectChanges();
spyOn(component, 'enabled').and.callThrough();
const button = fixture.debugElement.query(By.css('.egbx-btn-success'));
button.triggerEventHandler('click', null);
tick(30000);
const modalOkButton = document.querySelector('.ant-btn-primary') as HTMLButtonElement;
modalOkButton.click();
tick(20000);
fixture.detectChanges();
expect(component.enabled).toHaveBeenCalled();
}));
Я выполнил предыдущий контрольный пример, основанный на точно такой же отключенной функции, просто переключив статус и вызов функции, и он работает без проблем.