unitarios test mock example calledonce javascript node.js unit-testing mocking sinon

test - Simulador de constructor de JavaScript con Sinon.JS



stub calledonce (2)

Dado que se ha eliminado sinon.createStubInstance de las últimas versiones de Sinon, sugeriría el uso de métodos de instancia individuales en el prototipo para lograr el efecto deseado. Algo como esto:

const spy = sinon.stub(InternalService.prototype, ''getEvents'').returns([{ id: 1 }]); const internalService = new InternalService(); console.log(internalService.getEvents()); // => [{ id: 1 }]

Me gustaría probar la siguiente clase de ES6:

// service.js const InternalService = require(''internal-service''); class Service { constructor(args) { this.internalService = new InternalService(args); } getData(args) { let events = this.internalService.getEvents(args); let data = getDataFromEvents(events); return data; } } function getDataFromEvents(events) {...} module.exports = Service;

¿Cómo simulo un constructor con Sinon.JS para getEvents de internalService para probar getData ?

Miré a Javascript: Mocking Constructor usando Sinon, pero no pude extraer una solución.

// test.js const chai = require(''chai''); const sinon = require(''sinon''); const should = chai.should(); let Service = require(''service''); describe(''Service'', function() { it(''getData'', function() { // throws: TypeError: Attempted to wrap undefined property Service as function sinon.stub(Service, ''Service'').returns(0); }); });


Puede crear un espacio de nombres o crear una instancia de código auxiliar utilizando sinon.createStubInstance (esto no invocará al constructor).

Creando un espacio de nombres:

const namespace = { Service: require(''./service'') }; describe(''Service'', function() { it(''getData'', function() { sinon.stub(namespace, ''Service'').returns(0); console.log(new namespace.Service()); // Service {} }); });

Creando una instancia de stub:

let Service = require(''./service''); describe(''Service'', function() { it(''getData'', function() { let stub = sinon.createStubInstance(Service); console.log(stub); // Service {} }); });