Ich habe ein Servicemodul, das als eine Funktion exportiert wird. Ich muss ein paar Dinge hineingeben, wie ein Konfigurationsobjekt, also muss es diese Struktur behalten. Ich versuche, eine Funktion aus dem Dienst auszugeben, kann es aber nicht herausfinden. In meiner App habe ich eine Funktion, die einen API-Aufruf macht, der beim Testen problematisch ist, also möchte ich es stubben. (Ich verstehe, ich muss meinen Test anders schreiben die Asynchron-Ausgabe zu handhaben)Wie kann ich eine Funktion/Eigenschaft eines Knotenmoduls, das mit sinon als Funktion exportiert wurde, verhöhnen?
// myService.js
module.exports = function(config) {
function foo() {
returns 'bar';
}
return {
foo: foo
};
};
// test.js
var config = require('../../config');
var request = require('supertest');
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var myService = require('./myService.js')(config);
describe('Simple test', function(done) {
it('should expect "something else", function(done) {
var stub = sinon.stub(myService, 'foo').returns('something else');
request(server) // this object is passed into my test. I'm using Express
.get('/testRoute')
.expect(200)
.expect(function(res) {
expect(res.body).to.equal('something else');
stub.restore();
})
.end(done);
});
});
* /testRoute I set up as a simple GET route that simply returns the value from myService.foo()
Die oben nicht funktioniert, und ich glaube, es ist die Art und Weise zu tun hat mein Service exportiert. Wenn ich den Dienst wie folgt schreibe, funktioniert der Stub gut.
module.exports = {
test: function() {
return 'something';
}
};
Aber auch hier muss ich der Lage sein, in Informationen an das Modul übergeben, so würde ich meine Module wie oben in der ursprünglichen Struktur zu halten. Gibt es eine Möglichkeit, eine Funktion von einem Modul auszustoßen, das auf diese Weise exportiert? Ich habe auch nach Proxyquire gesucht, bin mir aber nicht sicher, ob das die Antwort ist.
Vielen Dank, das macht Sinn. Ich versuche, in TDD einzutauchen und bessere Gewohnheiten aufzubauen, und das wird sicherlich helfen. Ich werde die Funktionen wie vorgeschlagen statisch darstellen. Vielen Dank auch für die Heads-up auf die Reinigung der Stub. Ich mache ein AfterJede, dass ich renne, um aufzuräumen :) Ich denke, ich hätte es in meine Frage aufnehmen sollen! – ahnkee
Bitte denken Sie daran, meine Antwort zu akzeptieren, wenn es für Sie funktioniert – CaptEmulation
Just did. War gerade dabei meinen letzten Kommentar zu beenden: p – ahnkee