如何使用Sinon创建测试双精度,以防止执行实际函数

时间:2013-07-22 18:47:08

标签: javascript unit-testing mocha sinon

我正在使用Mocha和Sinon进行javascript 单元测试。我想测试在某些情况下是否调用某种方法。

但是,到目前为止,我无法管理来测试方法是否被调用。为了更清楚,我想要一个假的方法来替换实际的方法,因为我不想模拟我的整个应用程序状态来使这个简单的测试通过。

这是我的实际测试代码:

it('calls the handleResults method when its model syncs', function () {
  var spy = sinon.stub( this.appview, 'handleResults' ); 
  this.appview.model.fetch();
  server.requests[0].respond( 200,
                   { "Content-Type": "application/json" },
                   JSON.stringify( [ { id: "casa", text: "Something" } ] )
  );
  spy.should.have.been.called;
});

正在调用真正的this.appview.handleResults方法,而我想调用假的版本,除了检查它是否被调用之外别无其他。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

文档很清楚,通过使用stub,原始函数将被mock替换,不会被调用:

  

作为间谍,存根可以是匿名的,也可以包装现有的功能。   使用存根包装现有函数时,原始函数   不被称为。

  

var stub = sinon.stub(object,“method”);

     

用一个替换object.method   存根功能。可以通过调用恢复原始功能   object.method.restore();or stub.restore();)。抛出异常   如果属性不是一个功能,以帮助避免拼写错误   存根方法。