【问题标题】:Sinon.js set exact behavior of mockSinon.js 设置 mock 的确切行为
【发布时间】:2014-02-09 11:21:58
【问题描述】:

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

我该如何解决我的任务?

谢谢!

【问题讨论】:

    标签: javascript unit-testing sinon


    【解决方案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);
    

    【讨论】:

    • 是的,这很好用。但是,正如文档所说,模拟 api 扩展了存根。如何通过模拟该对象来做同样的事情?无论如何,谢谢你=)
    • 嗯,所以......你想基本上存根一个自定义行为('这里是我的测试行为',然后确保它被调用一次?
    • 是的,但是使用模拟 =) 不可能吗? )
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多