Come faccio a prendere in giro il database nella mia applicazione node.js, che in questo caso utilizza mongodb
come backend per un'API REST del blog?Database di simulazione in node.js?
Certo, potrei impostare il database su uno specifico testing
-database, ma vorrei comunque salvare i dati e non testare solo il mio codice, ma anche il database, quindi in realtà non sto facendo test unitari ma test di integrazione.
Quindi cosa si dovrebbe fare? Creare wrapper di database come livello intermedio tra applicazione e db e sostituire il DAL quando si esegue il test?
// app.js
var express = require('express');
app = express(),
mongo = require('mongoskin'),
db = mongo.db('localhost:27017/test?auto_reconnect');
app.get('/posts/:slug', function(req, res){
db.collection('posts').findOne({slug: req.params.slug}, function (err, post) {
res.send(JSON.stringify(post), 200);
});
});
app.listen(3000);
// test.js
r = require('requestah')(3000);
describe("Does some testing", function() {
it("Fetches a blogpost by slug", function(done) {
r.get("/posts/aslug", function(res) {
expect(res.statusCode).to.equal(200);
expect(JSON.parse(res.body)["title"]).to.not.equal(null);
return done();
});
});
));
Sai, sei un buon punto. Mentre i test unitari hanno uno scopo fenomenale (ad esempio l'isolamento), hai reso un punto di forza per i test di integrazione. –
@MichaelPerrenoud: Mi piace la regola stabilita dalla risposta di christkv: ** "Non prendere in giro tutto ciò che non possiedi" **. Anche se non entra nei dettagli perché è una cattiva idea, è una regola facile da ricordare. – slebetman
Non sono d'accordo con questa risposta, in meteorjs hanno impostato un DB di test in qualche modo durante l'esecuzione di test (presumo che non sia una libreria di simulazione, ma un file temporaneo) ed è molto conveniente. Sarebbe molto utile avere un oggetto che si comporta esattamente come un mongodb e si pulisce da solo. Se è tutto in memoria o un file temporaneo è il dettaglio dell'implementazione, quindi non devi duplicare il codice. Sono d'accordo che le persone che fanno il driver dovrebbero essere quelle che fanno l'oggetto finto. – Uri