В настоящее время я использую Jasmine в своем проекте Angular. Но каким-то образом я наткнулся на странное поведение со шпионами. Я уже читал некоторые другие вопросы о подобных проблемах, но я просто не представляю, как я должен решить эту проблему в моем конкретном случае.
Я определяю свой тест так:
describe('DialogComponent', () => {
let component: DialogComponent;
let fixture: ComponentFixture<DialogComponent>;
it('should open dialog and click', () => {
const button = overlayContainerElement.querySelector('button');
spyOn(component, 'doSmth').and.callThrough();
// component.doSmth(); <-- this passes
button.click(); // <-- this does not pass
expect(component.doSmth).toHaveBeenCalled();
});
});
Мой HTML - это просто маленькая форма с кнопкой, которая выполняет метод, например так:
<button mat-flat-button (click)="doSmth()" class="mat-primary" type="button">Submit</button>
Реализация doSmth () на данный момент является просто заполнителем в соответствующем файле машинописного текста, выводящим что-то на консоль.
doSmth() {
console.log('In doSmth()');
}
По какой-то причине я получаю сообщение "In doSmth ()" при запуске моего теста, но шпион говорит, что метод не был вызван. Я попробовал некоторые другие вещи, такие как выполнение метода не через button.click (), а через component.doSmth (), который работает. У кого-нибудь есть идеи как это решить?