如何监视函数
how to spy on a function
我正在尝试监视全局函数,例如
function foo() {
}
但是下面的测试失败了,怎么办
var spy = sinon.spy(foo);
foo();
expect(spy.callCount).to.equal(1);
** 编辑 **
如果我像下面那样做就可以了
var spy = sinon.spy(window, "foo");
foo();
expect(spy.callCount).to.equal(1);
所以有什么区别
使用 var spy = sinon.spy(foo);
并没有像您想象的那样包装函数 foo
。它实际上 returns 一个包含 wrapped 函数的间谍。
使用var spy = sinon.spy(window, "foo");
实际上包装了foo
方法。在内部,window["foo"] = <wrapped function>
正在完成,因此将 foo
引用的函数替换为包装函数。
要使 var spy = sinon.spy(foo);
正常工作,您不能调用 foo()
,而是需要调用 spy()
function foo() {
}
console.log('BEGIN sinon.spy(foo)');
var spy = sinon.spy(foo);
spy();
foo(); // called foo, but no effect on callCount
foo(); // called foo, but no effect on callCount
foo(); // called foo, but no effect on callCount
console.log('Call Count:', spy.callCount);
console.log('BEGIN sinon.spy(window, \'foo\')');
var spy = sinon.spy(window, 'foo');
spy();
foo();
foo();
foo();
console.log('Call Count:', spy.callCount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/1.15.4/sinon.min.js"></script>
我正在尝试监视全局函数,例如
function foo() {
}
但是下面的测试失败了,怎么办
var spy = sinon.spy(foo);
foo();
expect(spy.callCount).to.equal(1);
** 编辑 **
如果我像下面那样做就可以了
var spy = sinon.spy(window, "foo");
foo();
expect(spy.callCount).to.equal(1);
所以有什么区别
使用 var spy = sinon.spy(foo);
并没有像您想象的那样包装函数 foo
。它实际上 returns 一个包含 wrapped 函数的间谍。
使用var spy = sinon.spy(window, "foo");
实际上包装了foo
方法。在内部,window["foo"] = <wrapped function>
正在完成,因此将 foo
引用的函数替换为包装函数。
要使 var spy = sinon.spy(foo);
正常工作,您不能调用 foo()
,而是需要调用 spy()
function foo() {
}
console.log('BEGIN sinon.spy(foo)');
var spy = sinon.spy(foo);
spy();
foo(); // called foo, but no effect on callCount
foo(); // called foo, but no effect on callCount
foo(); // called foo, but no effect on callCount
console.log('Call Count:', spy.callCount);
console.log('BEGIN sinon.spy(window, \'foo\')');
var spy = sinon.spy(window, 'foo');
spy();
foo();
foo();
foo();
console.log('Call Count:', spy.callCount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/1.15.4/sinon.min.js"></script>