我是Angular的新手,我仍在尝试弄清楚它的工作方式。我目前无法测试依赖于返回Promise
的服务的组件。我正在测试的功能的结构如下:
success: boolean;
borrowBook() {
this.bookService.borrow(this.selectedBook.id)
.then(() => {
this.success = true;
})
.catch((error: BorrowingError) => {
this.success = false;
});
}
现在,我不太确定上面的代码是否被认为是惯用的,但这就是我编写代码的方式。在单元测试中,我使用bookService
函数模拟了jasmine.createSpyObj
,并按如下方式定义了存根:
mockBookService.borrow.and.returnValue(Promise.resolve(testResult));
但是,当我期望component.success
是真实的时,我的测试失败了。我的测试程序如下:
it('test', async(() => {
mockBookService.borrow.and.returnValue(Promise.resolve(testResult));
//setup pre-conditions here...
component.borrowBook(();
expect(component.success).toBeTruthy();
}));
我的印象是,即使在相应地处理Promise之前,也要检查期望值。
答案 0 :(得分:0)
我偶然发现了这个article about testing asynchronous code in Angular,它指出flushMicrotasks
函数可用于在检查期望值之前运行所有异步组件。这仅通过通过fakeAsync
创建的伪造区域提供,因此在我的代码中,我使用了它,而不仅仅是async
。
it('test', fakeAsync(() => { //used fakeAsync instead
mockBookService.borrow.and.returnValue(Promise.resolve(testResult));
//setup pre-conditions here...
component.borrowBook(();
flushMicrotasks(); //added this before checking expectations
expect(component.success).toBeTruthy();
}));