如何用Jest测试未被调用的回调函数?

4
有没有办法使用Jest测试回调函数是否未被调用?
例如:
o.subscribe(cb, cbError, cbComplete);
cbcbComplete回调函数应该被触发,而cbError回调函数不应该被触发。

有没有办法测试cbError永远不会被调用?


1
Sinon是一个非常好的用于创建spy函数的工具,或者你可以自己实现它,通过传递一个布尔标志到函数中,在执行时切换该标志,并断言该标志是否已经被更改。 - Richard
1个回答

1
根据@Richard的评论:
let error = false;
let cbError = ()=> { error =true };
let cbComplete = ()=>{
  complete = true;
  expect(complete).toBeTruthy();
  expect(error).toBeFalsy();
  done(); //This is the async callback that Jest provides to let Jest know that the test is done.

}

在完整的回调函数中,我们测试错误仍然为false。由于Observable完成后它是false,因此cbError回调从未被调用,因为该回调与其他回调互斥。
附注
这有点表明cbError未被调用。按设计,cbError和cbComplete回调应该是互斥的,但我们不能在jest的两个位置都调用done(),因为这将导致测试中的竞态条件,因此在这种情况下,我们必须信任设计。如果有其他想法,请留言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接