Javascript Sinon.js和instanceof中的mock类
我想模拟某个类的某个对象,但发现以下错误:Javascript Sinon.js和instanceof中的mock类,javascript,unit-testing,mocking,instanceof,sinon,Javascript,Unit Testing,Mocking,Instanceof,Sinon,我想模拟某个类的某个对象,但发现以下错误: function MyClass(){} var myInstance = new MyClass(); var mock = sinon.mock(myInstance); console.log(mock instanceof MyClass); // false 如果单元在构造函数中检查完全相同的instanceof,我如何将这个模拟传递给被测试的单元 我知道,那个存根解决了这个问题,但我需要完全模拟 谢谢=)如果我没有弄错的话,Sinon
function MyClass(){}
var myInstance = new MyClass();
var mock = sinon.mock(myInstance);
console.log(mock instanceof MyClass); // false
如果单元在构造函数中检查完全相同的instanceof,我如何将这个模拟传递给被测试的单元
我知道,那个存根解决了这个问题,但我需要完全模拟
谢谢=)如果我没有弄错的话,Sinon Mock会包装它们的关联对象,而不是直接采用它们的原型链,这意味着
的instanceof
永远不会像您希望的那样工作
如果您有能力更改被测试的单元,请考虑检查传入对象上的重要属性的存在,而不是检查其原型链。例如,如果您的单元使用了
MyClass
的foo
方法,那么让单元检查typeof o.foo===“function”
而不是o MyClass的实例
,问题就错了
我需要传递myInstance
对象,然后验证mock
,而不是将mock
传递给被测单元:
new SUT(myInstance);
mock.verify();
当然,这是一个解决方案-以ducktype的样式检查实例,但它与本机语言功能相比有点粗糙,如
instanceof
。