MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB en mémoire pour le test ?

Vous pouvez accomplir cela en utilisant mongodb-memory-server . Le package télécharge un binaire mongod dans votre répertoire personnel et instancie une nouvelle instance MondoDB sauvegardée en mémoire si nécessaire. Pour chaque fichier de test, vous pouvez démarrer un nouveau serveur, ce qui signifie que vous pouvez tous les exécuter en parallèle.

Pour les lecteurs utilisant jest et le pilote mongodb natif , cette classe peut vous être utile :

const { MongoClient } = require('mongodb');
const { MongoMemoryServer } = require('mongodb-memory-server');

// Extend the default timeout so MongoDB binaries can download
jest.setTimeout(60000);

// List your collection names here
const COLLECTIONS = [];

class DBManager {
  constructor() {
    this.db = null;
    this.server = new MongoMemoryServer();
    this.connection = null;
  }

  async start() {
    const url = await this.server.getUri();
    this.connection = await MongoClient.connect(url, { useNewUrlParser: true });
    this.db = this.connection.db(await this.server.getDbName());
  }

  stop() {
    this.connection.close();
    return this.server.stop();
  }

  cleanup() {
    return Promise.all(COLLECTIONS.map(c => this.db.collection(c).remove({})));
  }
}

module.exports = DBManager;

Ensuite, dans chaque fichier de test, vous pouvez effectuer les opérations suivantes :

const dbman = new DBManager();

afterAll(() => dbman.stop());
beforeAll(() => dbman.start());
afterEach(() => dbman.cleanup());

Je soupçonne que cette approche peut être similaire pour d'autres frameworks de test.