23

MongoDB データベースを使用して、NodeJS アプリケーションの統合およびシステム テストを作成しています。私が使用するテスト フレームワークは Mocha と Supertest です。MongoDB をインメモリ データベースとしてセットアップし、テストのみに使用して、テストが完了したときにすべてのコレクションとドキュメントを消去することは可能ですか?

4

2 に答える 2

7

mongodb-memory-server の使用をお勧めします。

プロジェクト全体で共有される DB ファイルがあるので、それもテスト可能にする必要があります。

//db.js

import mongoose from 'mongoose';
import bluebird from 'bluebird';

module.exports = {
  mongoose,
  init: () => {
      mongoose.Promise = bluebird;
  },
  connect: async database => {
      try {
          const conn =  await mongoose.connect(
              database,
              { useNewUrlParser: true }
          );

          //eslint-disable-next-line
          console.log(`MongoDb Connected on: ${database}`);

          return conn;
      } catch (err) {
          //eslint-disable-next-line
          console.log('Error to connect on mongo', err);
      }
  },
  disconnect: async () => await mongoose.connection.close()
};

テストで (db.js) を使用するために、test-helper.js ファイルを作成しました。

'use strict';
import MongodbMemoryServer from 'mongodb-memory-server';
import db from '../src/db';

const server = new MongodbMemoryServer();

const createDB = async () => {
    try {
       const url = await server.getConnectionString();
       db.connect(url);
    } catch (err) {
      throw err;
    }
 };

 const destroyDB = () => {
   db.disconnect();

 };

 module.exports = {
    createDB,
    destroyDB
 }; 
}

したがって、私のテストには常に前と後 (DB を作成および破棄するため) があり、次のようになります。

import { createDB, destroyDB } from '../test-helper';
before(() => {
  createDB();
});
after(() => {
  destroyDB();
});

お役に立てば幸いです。

私が使用しているプロジェクト: https://github.com/abdalla/node-auth

于 2019-04-17T18:15:55.487 に答える