Je Sinon ai les modules suivants:une dépendance par injection dans une classe stub de ES6 avec
const rp = require('request-promise');
// dummies.repository.js
exports.getDummiesData =() => {
const options = {
url: 'https://api.github.com/users',
headers: {
'User-Agent': 'Request-Promise',
},
json: true
};
return rp(options)
.then(r => r)
.catch(err => { throw err; });
}
Le fichier ci-dessus est une dépendance à une classe que je voudrais tester. Je l'injectons dans la classe inférieure par son constructeur comme ceci:
// dummies.service.js
const Dummies = require('./dummies.model');
class DummiesService {
constructor(dummiesRepository) {
this.dummiesRepository = dummiesRepository;
}
getDummies() {
return new Promise((resolve, reject) => {
this.dummiesRepository.getDummiesData()
.then((response) => {
// business logic
const dummies = response.map(d => new Dummies(d));
resolve(dummies);
})
.catch((response) => {
reject(response);
});
});
}
}
module.exports = DummiesService;
Dans ce qui précède, je veux tester la méthode getDummies
avec sinon. Mon approche jusqu'ici a été de remplacer le dummiesRepository
et d'injecter cela à mon service de mannequins pendant l'instanciation, mais j'obtiens une erreur. Voici comment mon test ressemble:
const DummiesService = require('../dummies.service');
const dummiesRepository = require('../dummies.repository');
let dummiesRepositoryStub;
afterEach(() => {
if(dummiesRepositoryStub){
dummiesRepositoryStub.restore();
}
});
describe('unit: dummies.service - when getting dummies data',() => {
it('it should resolve and return dummies data',() => {
const dummiesResponse = [
{ id: 1, login: 'dummy1', additionalData: 'data' },
{ id: 2, login: 'dummy2', additionalData: 'data' },
{ id: 3, login: 'dummy3', additionalData: 'data' },
];
dummiesRepositoryStub = sinon
.stub(dummiesRepository, 'getDummiesData')
.resolves(dummiesResponse);
dummiesService = new DummiesService(dummiesRepositoryStub);
// act + assert
return dummiesService.getDummies()
.then((response) => {
chai.expect(dummiesRepositoryStub.called).to.equal(true);
chai.expect(response).to.deep.equal(dummiesTransformedModel);
});
});
Ce test échoue avec l'erreur TypeError: this.dummiesRepository.getDummiesData is not a function
. Je ne suis pas sûr pourquoi cela ne fonctionne pas, j'ai injecté une implémentation stub de dummiesRepository à la classe DummiesService
. Veuillez aider.
Il manquait une seule citation sur la première ligne. 'const rp = require ('request-promise);' devrait être 'const rp = require (' request-promise ');' – SteamDev
Merci, mais ce n'est pas mon erreur. J'ai juste manqué la question – strizzwald