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