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

Posted

技术标签:

【中文标题】跟踪使用 Sinon/Mocha 调用方法的次数【英文标题】:Track how many times method has been called with Sinon/Mocha 【发布时间】:2018-07-08 14:28:44 【问题描述】:

我正在使用 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);
      
    );
  

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于跟踪使用 Sinon/Mocha 调用方法的次数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用堆栈跟踪或反射找到方法的调用者?

当方法被意外调用的次数超过指定次数时,有没有办法从 rspec 获取堆栈跟踪?

深入探究ZIPKIN调用链跟踪——拓扑Dependencies篇

9.11 strace:跟踪进程的系统调用 ltrace:跟踪进程调用库函数

跟踪播放 HTML5 音频元素的次数?

使用strace工具故障排查的5种简单方法