Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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'来伪造未定义的属性吗?_Javascript_Sinon - Fatal编程技术网

Javascript 我可以用'Sinon'来伪造未定义的属性吗?

Javascript 我可以用'Sinon'来伪造未定义的属性吗?,javascript,sinon,Javascript,Sinon,我知道当我想用一个新函数替换原来的函数时,stub将被使用 sinon.stub(A, 'b', function(){ //fake }) 但它仅在b是a的属性时才起作用。无论b是否存在,是否有办法伪造A.b 我知道我可以做一些事情,比如: var original = A.b; A.b = function() { //fake } .... test cases... A.b = original; // restore the original value 有没有更优雅

我知道当我想用一个新函数替换原来的函数时,
stub
将被使用

sinon.stub(A, 'b', function(){
  //fake
})
但它仅在
b
a
的属性时才起作用。无论
b
是否存在,是否有办法伪造
A.b

我知道我可以做一些事情,比如:

var original = A.b;
A.b = function() {
    //fake
}
.... test cases...
A.b = original; // restore the original value 

有没有更优雅的方法来实现这一点

我不认为有比这更优雅的方式,但我也不认为你需要sinon:

obj.stub = function () { //... };
// test stuff
delete obj.stub;

我很好奇-为什么?@Mikemore你可以看看这个问题:那么你的答案和我的第二个代码块有什么区别?此外,您不能只删除它,如果它在存根之前有一个值呢?因此,您无法控制
a
?我想我假设您正在编写自动测试,您可以控制对象是否具有属性。如果我可以控制
A
,我可以使用
stub
:)我想我不明白。您是否可以控制
A
?也许您可以编写一个条件来检查属性
b
是否存在。如果存在,请使用sinon,如果不存在,请不要使用sinon。。。只是想帮忙。也许你可以澄清你的原始问题。原始问题是我正在测试一些关于触摸事件的用例,在浏览器中。在浏览器中,
document.documentElement.ontouchstart
未定义的
。但是当它被定义时,我必须测试一些逻辑。回到这个问题上来,
A.b
在这里不存在。您的答案确实有效,但它与我的第二个代码块相同。我想找到其他的解决办法。谢谢你的耐心,我真的很感激。