我有一组测试,我在我的代码上运行。在测试运行之前,我想打开与测试数据库的数据库连接,并确保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);
});
目前,此代码功能完备。但是,我确信有更好的方法来处理我的测试集合的数据库连接的打开,清除和关闭。
答案 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按字母顺序调用您的文件