Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sinon.js和instanceof中的mock类_Javascript_Unit Testing_Mocking_Instanceof_Sinon - Fatal编程技术网

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