Angular 5 / Jasmine 2测试setTimeout函数仅一次

时间:2018-10-17 14:18:33

标签: angular unit-testing jasmine2.0

我的问题是我具有此功能:

    loopPingAPI() {
    this.pingAPI().then(
        success => {
            this.setConnected(true);
            this.stopPingAPI();

            return true;
        }, error => {
            this.setConnected(false);
            return true;
        });
    this.timer = setTimeout(() => this.loopPingAPI(), 5000);
}

有一个setTimeout(功能每5000毫秒启动一次),我尝试像这样测试它:

      it('should not call the stopPingApi function', fakeAsync(() => {
            connectivityService.loopPingAPI();
            flushMicrotasks();
            expect(connectivityService.stopPingAPI).not.toHaveBeenCalled();
        }));

我有此错误:

Error: 1 timer(s) still in the queue.

是否有一种方法只能一次调用函数loopPingApi(),然后调用stopPingApi()函数(此函数通过clearTimeout(this.timer)杀死setTimeout)?

P.S:使用tick()/ flush()代替flushMicroTasks()具有相同的结果。

0 个答案:

没有答案