【问题标题】:Spy, Stub or Mock? Or None of the Above?间谍、存根还是模拟?或者以上都不是?
【发布时间】:2013-08-01 16:59:06
【问题描述】:

我正在使用 Mocha 测试 Node.js API。我需要测试一条检查更新是否可用的路线。该路由接受当前安装的版本号,并将其与通过 HTTP 请求检索到的可用版本进行比较。

为了获得可用的最新版本,调用模型方法。 Client.availableVersion() 发出 HTTP 请求,进行一些简单的操作并将可用版本传递给回调函数。相当简单的东西,但现在我想测试我的update() 路由,我需要能够控制Client.availableVersion() 返回的内容。

阅读了 Mocha 文档和被提及的 Sinon 文档...我被卡住了。听起来Sinon会处理我需要的东西,但是实现让我有点困惑。

这是我的路由方法中的一个 sn-p:

update: function( req, res, next ) {
  var installedVersion = req.params.version;

  client.availableVersion( function( err, availableVersion ) {
    if( !err ) {
      if( parseInt( installedVersion, 10 ) < parseInt( availableVersion, 10 ) ) {
        // SEND UPDATE AVAILABLE RESPONSE
      }

      // SEND NO UPDATE AVAILABLE RESPONSE
    }
    else {
      res.send( 500, err );
    }
  })
}

我们将不胜感激。

【问题讨论】:

    标签: mocha.js sinon


    【解决方案1】:

    我肯定会选择存根。 http://sinonjs.org/docs/#stubs

    我会使用stub.yields(...)

    var next = sinon.spy()
    var err = ... //Whatever object you want to pass as error or undefined
    var availbleVersion = ... // A fake of the response the method is supposed to give
    client.availableVersion = sinon.stub().yields(err, availableVersion);
    
    myRoute.update(fakeReq, fakeRes, next);
    
    //All you expectations
    

    【讨论】:

    • 谢谢。这似乎完全符合我的需要。
    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2012-02-17
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多