2014-09-25 122 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();