【发布时间】:2020-02-06 09:42:22
【问题描述】:
我想测试服务返回的对象是否调用了特定的方法。
组件方法是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 回调中创建了 spy 对象。
modalControllerSpy = jasmine.createSpyObj('modalController', ['create']);
modalSpy = jasmine.createSpyObj('modal', ['present']);
我想测试我的modalSpy 是否调用present 函数。
也许我在这里做错了什么。
【问题讨论】:
-
你检查过任何答案吗?任何反馈将不胜感激。
标签: angular typescript unit-testing jasmine