【问题标题】:Testing callbacks that are not called with Jest?测试不使用 Jest 调用的回调?
【发布时间】:2019-04-11 04:54:24
【问题描述】:

有没有办法测试 Jest 没有调用回调?

例如:

o.subscribe(cb, cbError, cbComplete);

cbcbComplete 回调应该触发,cbError 回调不应该触发。

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

【问题讨论】:

  • Sinon 是一个创建间谍函数的好工具,或者你可以自己实现它,通过将一个布尔标志传递给在执行时被切换的函数,并断言该标志已经/还没有改变了

标签: javascript node.js typescript jestjs sinon


【解决方案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(),因为它等于测试中的竞争条件,所以本质上我们必须信任设计在这种情况下。如果有人对此有任何其他想法,请发表评论。

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2023-02-07
    • 2021-08-08
    • 2020-05-08
    • 2019-12-28
    相关资源
    最近更新 更多