间谍,存根或模拟?或者以上都没有?

时间:2013-08-01 16:59:07

标签: mocha sinon

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

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

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

这是我的路线方法的一个片段:

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 );
    }
  })
}

任何朝着正确方向的推动都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我肯定会使用存根。 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