2014-01-08 85 views
4

我想用Sinon.js來測試代碼,但我不熟悉它應該表現出來。在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 

我在想什麼?

回答

3

這取決於你有什麼要做的:

如果您沒有任何通話的期望,那麼你應該使用一個存根,例如開始時間()只返回一個值。

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(); 

希望這會有所幫助。

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