Подтвердить что ты не робот

Шпионаж на конструктор в javascript с синоном

Я пытаюсь создать шпион по конструктору и посмотреть, будет ли он вызван - ниже приведены мои тесты. Я использую 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');
});
4b9b3361

Ответ 1

Проблема заключается в том, что Sinon не знает, какая ссылка на шпион, поэтому решение должно либо использовать объект i.e. sinon.spy(namespace, 'foo'), либо переопределить ссылку самостоятельно foo = sinon.spy(foo).

Ответ 2

Учитывая, что ваш конструктор привязан к "окну", что означает, что, если вы открываете консоль разработчика в своем браузере, вы должны быть в состоянии запутать объект, используя соответствующую функцию/конструктор как таковой:

var temp = new FunctionName();

Если фактический рабочий код может быть:

var jamesBond = sinon.spy(window, 'FunctionName');
var temp = new FunctionName(args);

expect(jamesBond.called).to.be.equal(true);