Я хотел проверить, вызывает ли объект, возвращаемый службой, определенный метод.
Метод компонента - async
, поскольку служба вернет Promise
.
код компонента.
// component
export class FilterComponent {
constructor(
private modalController: ModalController,
) { }
async onFilterClicked() {
const modal = await this.modalController.create({
component: FilterModalPage,
});
modal.onDidDismiss().then(res => {
if (res.data) {
// do something
}
});
await modal.present();
}
}
и это мой тест
describe('FilterComponent', () => {
let fixture: ComponentFixture<FilterComponent>;
let component: FilterComponent;
let modalControllerSpy;
let modalSpy;
beforeEach(async () => {
modalControllerSpy = jasmine.createSpyObj('modalController', ['create']);
modalSpy = jasmine.createSpyObj('modal', ['present']);
TestBed.configureTestingModule({
declarations: [FilterComponent],
providers: [
{ provide: ModalController, useValue: modalControllerSpy },
]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(FilterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
describe('onFilterClicked', () => {
it('should `present` the modal', () => {
modalControllerSpy.create.and.returnValue(modalSpy);
component.onFilterClicked();
fixture.detectChanges();
expect(modalControllerSpy.create).toHaveBeenCalled(); // success
expect(modalSpy.present).toHaveBeenCalled(); // fail :( how to test `present` is called????
});
});
});
Я создал шпионский объект при первом beforeEach
обратном вызове.
modalControllerSpy = jasmine.createSpyObj('modalController', ['create']);
modalSpy = jasmine.createSpyObj('modal', ['present']);
Я хотелпроверить, вызывает ли моя modalSpy
функция present
. Возможно, я сделал что-то не так здесь.