angular/jasmine: Error: No deferred tasks to be flushed

angular/jasmine: Error: No deferred tasks to be flushed

我正在对我的指令之一进行单元测试,但出现以下错误

Error: No deferred tasks to be flushed

我需要测试的代码在 $timeout 中

$timeout(function () {
    $window.doStuff();
});

所以当我想检查 doStuff 是否被调用时,我会做

$timeout.flush();
expect($window.doStuff).toHaveBeenCalled();

但是,现在我需要测试一种我不希望 doStuff 被调用的情况。所以我做了:

$timeout.flush();
expect($window.doStuff).not.toHaveBeenCalled(); // Notice the not here!!

但是,因为 $timeout 没有被调用,$timeout.flush() 给了我这个错误。

所以问题是,测试这种情况的首选方法是什么?

使用$timeout.verifyNoPendingTasks()检查是否没有添加任务。

检查 angular 文档 here:

Verifies that there are no pending tasks that need to be flushed.