在Sinon.js中创建测试对象

时间:2014-01-08 03:59:13

标签: javascript testing sinon

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

我错过了什么?

2 个答案:

答案 0 :(得分:3)

这取决于你想做什么:

如果您对通话没有任何期望,那么您应该使用存根,例如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();

希望这有帮助。

答案 1 :(得分:0)

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

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