Sinon.js设置了mock的确切行为

时间:2014-02-09 11:21:58

标签: javascript unit-testing sinon

我正在使用Sinon在我的js代码中测试一些单元。

问题是 - 我怎样才能改变模拟对象方法的行为?

例如,我有一些具有reject方法的对象。我希望他返回一些计算值,并期望它在适当的上下文中调用一次。我做了下面的事情:

var myObj = {reject: function(){
  // here original behavior
}};

sinon.stub(myObj, 'reject', function() {
  // here my test behavior
});

sinon.mock(myObj).expects('reject').once().on(someContext);

但最终我得到了错误:TypeError: Attempted to wrap reject which is already spied on

我如何解决我的任务?

谢谢!

1 个答案:

答案 0 :(得分:1)

看起来你正试图将TWICE方法存根。您可能希望将您的期望添加到第一个存根的结果中:

var myObj = {reject: function(){
    // here original behavior
}};

myObjStub = sinon.stub(myObj, 'reject', function() {
    // here my test behavior
});

myObjStub.once().on(someContext);

如果你想基本上存根自定义行为('这里是我的测试行为',然后确保一旦你这样做就调用它:

var myObj = {reject: function(){
    // here CUSTOM behavior
}};

myObjStub = sinon.mock(myObj);
myObjStub.once().on(someContext);