Ich versuche, Tests für meinen Code (einfache Version von dem, was ich unten testen möchte) zu schreiben, und verwenden Sie Sinon und Chai, um andere Dinge zu testen, aber tun Ich weiß nicht, wie ich meine Tests schreiben soll, um einen Serviceanruf zu simulieren, so dass ich Anrufe an externe Dienste vermeiden kann, aber simulierte Ergebnisse zurückbekommen, damit ich die Daten verarbeiten kann. Würde ich rewire verwenden (und wenn ja, wie würde das funktionieren)? Jede Hilfe wäre willkommen!Verwenden von Sinon zum Testen der Knotenfunktion ohne den Service-Aufruf innerhalb
qf = require('./service/queryFile');
function countByDate(req, res, next){
//do stuff to create variable to pass to service call
var queryCriterion = {
d1 = req.query.d1,
d2 = req.query.d2
}
//make service call and process results
qf.getByDateAsync(queryCriterion)
.then(function(results){
var data = {};
//do some things with results data
data = results.data;
//return data object
res.json({
success: true,
data: data,
});
});
}
module.exports = {
countByDate: countByDate
};
**** Weitere Details ****
Die queryFile:
function getByDate(criterion){
//query from database
//process results
return {
key1: aValue,
key2: bValue,
data: arrayOfObjects
};
}
exports = module.exports = {
getByDate: getByDate,
getByDateAsync: Promise.promisify(getByDate)
};
Der Test:
var pf = require('./service/processFile');
var qf = require('./service/queryFile');
var req, res;
before(function(){
this.timeout(30000);
});
beforeEach(function(){
res.json = sinon.spy();
res.status = sinon.stub().returns({json: sinon.spy()});
});
describe('test', function(){
it('should return results from countByDate', function(done){
var eDate = new Date();
var sDate = eDate.getDate()-60;
req = res = {};
req.query = {
d1: sDate,
d2: eDate
};
var testData = [{
key1: '',
key2: '',
data: [{aKey: new Date(), count: 100}]
}];
sinon.stub(qf, 'getByDateAsync').returns(Promise.resolve({data:tData}));
pf.countByDate(req,res);
console.log(res.json.data);
}
Ich habe schon versucht, diese und der Test fehlschlägt, „vor jedem“ Haken einen Fehler zu erhalten ... Typeerror: Versuchte nicht definierte Eigenschaft getByDateAsync als Funktion zu wickeln. –
Dann gibt Ihre qf-Datei diese Methode nicht frei, und Ihr Code wird überhaupt nicht ausgeführt. – jishi
Einige Änderungen vorgenommen, und einige weitere Details hinzugefügt ... Fehler jetzt sagt mir, dass in dieser Zeile: qf.getByDateAsync (queryCriterion) TypeError: undefined ist keine Funktion –