为mocha测试设置数据库连接的最佳实践和最有效的方法

时间:2017-11-23 08:29:24

标签: javascript node.js database nosql mocha

我有一组测试,我在我的代码上运行。在测试运行之前,我想打开与测试数据库的数据库连接,并确保db为空。对于所有测试,此连接将保持打开状态。然后,当所有测试都完成后,关闭数据库连接并清空数据库。

我当前的解决方案涉及为每个文件打开一个连接,这将导致整体的大量连接。打开连接一次是理想的 - >运行测试 - > clear db - >关闭连接一次。

以下是我的一个mocha测试文件的代码:

import {assert} from 'chai';
import mongoose from 'mongoose';
import User from '../../../server/models/user.js';
import 'dotenv/config';

mongoose.connect(process.env.DB_TEST).then(db => {
  describe('User Model', function() {
    it('Save', function(done) {
      var john = new User({
        name: {
          first: 'John',
          last: 'smith'
        },
        email: 'john.smith@gmail.com',
        type: 'student'
      });

      john.save(done);
    });
  });
}).catch(err => {
  console.log('Failed to connect to testing database: ' + err);
});

目前,此代码功能完备。但是,我确信有更好的方法来处理我的测试集合的数据库连接的打开,清除和关闭。

1 个答案:

答案 0 :(得分:1)

您可以使用我称之为Root level hooks的内容。

示例:

测试档案

test0.es6
test1.es6
test2.es6
...

使用test0.es6文件来处理数据库连接,例如:

// ROOT HOOK Executed before the test run
before((done) => {
  connectToDatabase()
    .then(() => {
       ...
       done();
    })
    .catch(...);
});

// ROOT HOOK Excuted after every tests finished
after((done) => {
  disconnectFromDatabase()
    .then(() => {
       ...
       done();
    })
    .catch(...);
});

使用其他文件使用数据库连接执行测试:

/** @test {core} */
describe('core', () => {
  /** @test {core#executeCommandApi} */
  describe('executeCommandApi()', () => {
    it(...);
  });
});

要了解的事项: Mocha按字母顺序调用您的文件