test example javascript mocha sinon

javascript - example - sinon npm



Espiando a un constructor en javascript con sinon (3)

Estoy tratando de crear un espía en un constructor y ver si se llama, a continuación están mis pruebas. Estoy usando sinon-chai, por lo que la sintaxis es válida, pero ambas pruebas fallan.

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''); });


El problema es que Sinon no sabe en qué referencia espiar, así que la solución es usar un objeto, es decir, sinon.spy(namespace, ''foo'') o anular la referencia usted mismo foo = sinon.spy(foo) .


En caso de que quiera usar esto en Node, la respuesta de @ stckvflw se puede adaptar asumiendo que conoce el espacio de nombres del constructor como @billy se menciona. Para las clases integradas de JS, probablemente tengas razón al suponer que viven en un global .

Un ejemplo concreto que usa chai-spies para congelar el objeto Date (equivalente a crear un stub con Sinon):

const moment = new Date(); chai.spy.on(global, ''Date'', () => moment);


Teniendo en cuenta que su constructor está vinculado a la "ventana", lo que significa que si abre la consola del desarrollador en su navegador, debería poder intuir un objeto utilizando la función / constructor relacionado como tal:

var temp = new FunctionName();

Si es así, el código de trabajo real podría ser:

var jamesBond = sinon.spy(window, ''FunctionName''); var temp = new FunctionName(args); expect(jamesBond.called).to.be.equal(true);