¿Cómo puedo simular la base de datos en mi aplicación node.js, que en este caso usa mongodb
como back-end para una API REST de blog?¿Base de datos burlona en node.js?
Claro, podría establecer la base de datos a una base de datos testing
específica, pero aún así guardaría datos y no probaría solo mi código, sino también la base de datos, así que en realidad no estoy realizando pruebas unitarias sino de integración.
Entonces, ¿qué debería uno hacer? ¿Crear contenedores de base de datos como una capa intermedia entre la aplicación y db y reemplazar el DAL cuando se está probando?
// 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();
});
});
));
Ya sabes, haces un buen punto. Si bien las pruebas unitarias tienen un propósito fenomenal (es decir, el aislamiento), ha constituido un punto fuerte para las pruebas de integración. –
@MichaelPerrenoud: Me gusta la regla establecida por la respuesta de christkv: ** "No te burles de nada que no te pertenezca" **. Si bien no entra en detalles por qué es una mala idea, es una regla fácil de recordar. – slebetman
No estoy de acuerdo con esta respuesta, en meteorjs configuraron una base de datos de prueba de alguna manera cuando se ejecutan pruebas (supongo que no es una biblioteca simulada, sino un archivo temporal) y es muy conveniente. Sería muy útil tener un objeto que se comporta exactamente como un mongodb y se limpia solo. Si está todo en la memoria o en un archivo temporal es el detalle de la implementación, por lo que no tiene que duplicar el código. Estoy de acuerdo en que las personas que fabrican el controlador deberían ser las que hacen el objeto simulado. – Uri