【问题标题】:Can I use `Sinon` to fake an undefined property?我可以使用“Sinon”来伪造未定义的属性吗?
【发布时间】:2016-08-27 02:10:28
【问题描述】:

我知道stub是在我想用新功能替换原来的功能时使用。

sinon.stub(A, 'b', function(){
  //fake
})

但它仅在 bA 的属性时才有效。不管b是否存在,有没有办法伪造A.b

我知道我可以这样做:

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

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

【问题讨论】:

标签: javascript sinon


【解决方案1】:

我认为没有更优雅的方式,但我也不认为您需要 sinon:

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

【讨论】:

  • 那么你的答案和我的第二个代码块有什么区别?此外,你不能直接删除它,如果它在你的存根之前有一个值怎么办?
  • 那么,您无法控制A?我想我假设您正在编写自动化测试,您可以控制对象是否具有属性。
  • 如果我可以控制A,我可以使用stub :)
  • 我想我不明白。您是否可以控制A?也许您可以编写一个条件来检查属性b 是否存在。如果存在,请使用 sinon,如果不存在,请不要使用 sinon……只是想提供帮助。也许你可以澄清你原来的问题。
  • 最初的问题是我正在浏览器中测试一些有关触摸事件的用例。在浏览器中,document.documentElement.ontouchstartundefined。但是我必须在定义时测试一些逻辑。所以回到这个问题,A.b 这里不存在。您的答案确实有效,但与我的第二个代码块相同。我正在尝试找出其他解决方案。感谢您的耐心等待,我真的很感激。