2014-09-25 124 views
1

我想嘲笑某些類的對象,但抓住這個錯誤:嘲諷類的instanceof

function MyClass(){} 

var myInstance = new MyClass(); 
var mock = sinon.mock(myInstance); 

console.log(mock instanceof MyClass); // false 

我這怎麼能模擬傳遞到單元測試下,如果單位檢查準確在構造函數中的同一個instanceof?

我知道,那個存根解決這個問題,但我確切需要模擬。

感謝=)

回答

0

如果我沒有記錯的話,興農嘲笑包及其關聯的對象,而不是直接採用其原型鏈,這意味着instanceof從未去工作,只要你想。

如果您有能力更改被測單元,請考慮檢查傳入對象上是否存在重要屬性,而不是其原型鏈。例如,如果您的單位使用MyClassfoo方法,則請讓單位檢查typeof o.foo === 'function'而不是o instanceof MyClass

+0

。當然,這是一個解決方案 - 在ducktype的風格,以檢查實例,但它與「instanseof」的本地語言功能相比有點冒險。 – gobwas 2014-09-26 07:34:39

0

問題是錯誤的。

不是傳遞mock到單元測試的,我需要的還是通過myInstance對象,然後驗證mock

new SUT(myInstance); 
mock.verify();