85 votes

Mocker une base de données dans node.js ?

Comment puis-je simuler la base de données dans mon application node.js, qui dans ce cas utilise mongodb comme backend pour l'API REST d'un blog ?

Bien sûr, je pourrais définir la base de données sur une base spécifique. testing -mais je continuerais à enregistrer des données et à tester non seulement mon code, mais aussi la base de données, de sorte que je ne fais pas de tests unitaires, mais des tests d'intégration.
Que faire alors ? Créer des wrappers de base de données comme couche intermédiaire entre l'application et la base de données et remplacer le DAL lors des tests ?

// 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();
    });

  });
));

3voto

Uri Points 2724

J'ai eu ce dilemme et j'ai choisi de travailler avec une DB de test et de la nettoyer à chaque fois que le test commence. (comment tout laisser tomber : https://stackoverflow.com/a/25639377/378594 )

Avec NPM, vous pouvez même créer un test script qui crée le fichier db et le nettoie après.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X