Ошибка теста Жасмин: ожидаемый шпион включен - PullRequest
0 голосов
/ 11 марта 2020

Я получаю эту постоянную ошибку, когда пытаюсь запустить этот тестовый пример, где я запускаю модальное нажатие, которое должно вызывать метод "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();
}));

Я выполнил предыдущий контрольный пример, основанный на точно такой же отключенной функции, просто переключив статус и вызов функции, и он работает без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...