bil*_*lly 20 javascript mocha.js sinon
我试图在构造函数上创建一个间谍,看看它是否被调用 - 下面是我的测试.我正在使用sinon-chai,因此语法有效,但两个测试都失败了.
var foo = function(arg) {
};
var bar = function(arg) {
var baz = new foo(arg);
};
it('foo initialized inside of this test', function() {
var spy = sinon.spy(foo);
new foo('test');
expect(spy).to.be.called;
expect(spy).to.be.calledWith('test');
});
it('foo initialized by bar()', function() {
var spy = sinon.spy(foo);
bar('test');
expect(spy).to.be.called;
expect(spy).to.be.calledWith('test');
});
Run Code Online (Sandbox Code Playgroud)
考虑到你的构造函数绑定到'window',这意味着如果你在浏览器上打开开发人员控制台,你应该能够通过使用相关的函数/构造函数来实例化对象:
var temp = new FunctionName();
Run Code Online (Sandbox Code Playgroud)
如果是这样,实际工作代码可能是:
var jamesBond = sinon.spy(window, 'FunctionName');
var temp = new FunctionName(args);
expect(jamesBond.called).to.be.equal(true);
Run Code Online (Sandbox Code Playgroud)
问题是Sinon不知道什么是对间谍的引用,所以解决方案是使用一个对象,sinon.spy(namespace, 'foo')或者自己覆盖引用foo = sinon.spy(foo).