Ответ 1
Проблема заключается в том, что Sinon не знает, какая ссылка на шпион, поэтому решение должно либо использовать объект i.e. sinon.spy(namespace, 'foo')
, либо переопределить ссылку самостоятельно foo = sinon.spy(foo)
.
Я пытаюсь создать шпион по конструктору и посмотреть, будет ли он вызван - ниже приведены мои тесты. Я использую 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');
});
Проблема заключается в том, что Sinon не знает, какая ссылка на шпион, поэтому решение должно либо использовать объект i.e. sinon.spy(namespace, 'foo')
, либо переопределить ссылку самостоятельно foo = sinon.spy(foo)
.
Учитывая, что ваш конструктор привязан к "окну", что означает, что, если вы открываете консоль разработчика в своем браузере, вы должны быть в состоянии запутать объект, используя соответствующую функцию/конструктор как таковой:
var temp = new FunctionName();
Если фактический рабочий код может быть:
var jamesBond = sinon.spy(window, 'FunctionName');
var temp = new FunctionName(args);
expect(jamesBond.called).to.be.equal(true);