跟踪使用 Sinon/Mocha 调用方法的次数

Zac*_*ach 2 mocha.js node.js promise async-await sinon

我正在使用 Mocha/Sinon 编写一个测试,以确保async tryAtMost我创建的函数正在调用 Promise 并且只重试该承诺X次数。

我的tryAtMost功能看起来像:

  async tryAtMost(options, promise, maxRetries, retryInterval = 0) {
    return new Promise(async (resolve, reject) => {
      try {
        const res = await promise(options);
        if (res.statusCode == 200) {
          return resolve(res);
        } else {
          if (maxRetries > 0) {
            setTimeout(async () => {
              return await this.tryAtMost(options, promise, maxRetries - 1, retryInterval);
            }, retryInterval);
          } else {
            return reject('Ran out of retries, failing.');
          }
        }
      } catch (err) {
        return reject(err);
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

我的 Mocha 测试为我的promise库创建了一个存根,我可以强制它返回我想要的任何状态代码。但是,我希望我的测试能够验证tryAtMost仅被调用maxRetries + 1的次数。如果有人更熟悉 Mocha/Sinon 可以帮助我弄清楚如何做到这一点,我将不胜感激。

Zac*_*ach 5

诗乃间谍为我完美解决了这个问题。我对我的包装方法做了一个间谍,我所要做的就是检查tryAtMostSpy.callCount. 文档使它变得非常简单:)