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
在这里不存在。您的答案确实有效,但它与我的第二个代码块相同。我想找到其他的解决办法。谢谢你的耐心,我真的很感激。