Javascript 如何使用sinon.js监视预定义对象

Javascript 如何使用sinon.js监视预定义对象,javascript,testing,sinon,spy,Javascript,Testing,Sinon,Spy,我正试图用sinon.js监视window.document。我所做的是: var document = { getElementById = function() {} } sinon.spy(document, "getElementById").withArgs("foo").returnValues = ["bar"]; 我对这次电话的期望是: 当使用参数“foo”调用document.getElementById时,函数必须返回“bar”。我的错误是什么 如果我自己这样定义

我正试图用sinon.js监视window.document。我所做的是:

var document = {
    getElementById = function() {}
}

sinon.spy(document, "getElementById").withArgs("foo").returnValues = ["bar"];
我对这次电话的期望是: 当使用参数“foo”调用document.getElementById时,函数必须返回“bar”。我的错误是什么

如果我自己这样定义getElementById,我会得到预期的结果:

document.getElementById = function(param) {
    if (param === "foo") return "bar";
}

您只能记录对函数的调用并检查是否调用了tey,但决不能更改函数的行为。从带有参数的
文档中:

创建仅在收到参数时记录调用的间谍 将传递给的内容与参数匹配

您要找的是一个
sinon.stub

sinon.stub(document, 'getElementById').withArgs('foo').returns(['bar'])

@Aykut Yaman:您在这里所做的
document.getElementById=function(param){if(param==“foo”)返回“bar”}
将永久替换原始的
getElementById
函数。与
存根执行的操作相同。唯一的区别是在存根的情况下,您可以选择还原原始函数。