如何在Angular中使用异步调用测试功能

时间:2019-02-14 05:31:14

标签: angular karma-jasmine

我想在调用异步函数的组件中测试一个函数。我想测试一个函数是否在另一个函数之后被调用。

我曾尝试toHaveBeenCalledBefore,然后等待(按承诺),但没有成功。我的组件功能代码如下:

public async onModalExecute() { 
    const center = this.service.graph.getCenter();
    this.service.graph.fitPage();
    this.service.graph.screenshot().then(() => {
        this.service.graph.setCenter(center);
    });
}

在我的spec.ts文件中,我有以下代码:

const setCenterSpy = spyOn(service.graph, 'setCenter');
const getCenterSpy = spyOn(service.graph, 'getCenter').and.returnValue({ x: 0, y: 0 });

component.onModalExecute();

expect(getCenterSpy).toHaveBeenCalledBefore(setCenterSpy);

它应该能正常工作,但是我得到了被期望的间谍setCenter。它仅在使用setTimeOut时有效。什么是正确的解决方案?是setTimeOut唯一的解决方案吗?

0 个答案:

没有答案