【问题标题】:Creating test objects in Sinon.js在 Sinon.js 中创建测试对象
【发布时间】:2014-01-26 00:42:15
【问题描述】:

我正在尝试使用 Sinon.js 测试代码,但我不熟悉它的行为方式。

我希望我可以创建一个“假”对象,用 sinon 包装它并将它传递给我正在测试的任何东西,并让它做它的事情。但是,似乎每次我尝试包装一个 sinon 对象时,该函数都不存在:

var event_api = {
  startTime: function() {
    return '123';
  }
}

var stub = sinon.stub(event_api);
console.log(stub.startTime()) // returns undefined
var mock = sinon.mock(event_api);
console.log(mock.startTime()) // returns undefined

我错过了什么?

【问题讨论】:

    标签: javascript testing sinon


    【解决方案1】:

    这取决于你想做什么:

    如果您对调用没有任何期望,那么您应该使用存根,例如 startTime() 只需返回一个值。

    var event_api = {
      startTime: sinon.stub().returns('123')
    }
    
    console.log(event_api.startTime());
    

    但如果你想要为调用设置一些断言,那么你应该使用模拟。

    var event_api = {
      startTime: function() {
        return '123';
      }
    }
    
    //code to test
    function getStartTime(e) {
      return e.startTime();
    }
    
    var mock = sinon.mock(event_api);
    mock.expects("startTime").once();
    
    getStartTime(event_api);
    mock.verify();
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      该功能确实存在,但它没有任何功能,因为它已被存根。 如果你想在控制台中记录函数本身,你必须执行:

      console.log(stub.startTime)   //logs the function itself
      

      代替:

      console.log(stub.startTime())   //logs the result of the function, which is undefined
      

      但是,如上所述,存根对象的所有方法都已“清空”了它们的功能。如果你想让一个存根对象的方法返回一个值,你可以这样做:

      var stub = sinon.stub(event_api);
      stub.startTime.returns(123);
      console.log(stub.startTime)    //log the function
      console.log(stub.startTime())    //log the result of function, that is now 123
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2017-12-11
        • 2017-02-17
        • 2017-08-12
        • 2021-09-10
        • 2021-11-07
        相关资源
        最近更新 更多