我正在尝试学习使用MongoDB进行测试驱动开发。文件夹结构如下:
在src文件夹中有一个用于测试的user.js
文件。
const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
const Schema = mongoose.Schema;
const UserSchema = new Schema ({
name: String
});
const User = mongoose.model('user', UserSchema);
module.exports = User;
test_helper.js
的内容
const mongoose = require('mongoose');;
mongoose.connect('mongodb://localhost/users_test');
mongoose.connection
.once('open', () => {
console.log('Connected to Mongo!');
done()})
.on('error', (error) => {
console.warn('Warning', error);
});
create_test.js
的内容
const assert = require('assert');
const User = require('../src/user');
describe('Creating records', () => {
it('Saves a user', (done) => {
const user = new User({ name: 'Ankur' });
user.save()
.then(() => {
assert(!user.isNew);
done();
});
现在我运行 npm test
,测试已经通过了。
Connected to Mongo!
Creating records
√ Saves a user (779ms)
但是我的疑问是,Mocha
如何知道每次都要先运行 test_helper.js
文件。(并且将该文件命名为其他任何名称都不会改变其行为)。
同时我没有使用任何根级别的 hook。
我知道 Mocha
递归地加载每个目录中的文件,从根目录开始,由于这里所有内容都在一个目录中,所以这里没有任何区别。
请问有人能否建议或帮忙,Mocha
究竟如何知道应首先运行 test_helper.js
(或具有相同内容的任何文件名)。
before
钩子中,你就避免了我所描述的问题。这也符合我所解释的行为。before
钩子必须在任何测试之前执行。它不依赖于加载顺序。 - Louisreaddir(3)
,而它并不保证顺序。然后我发现了问题报告,解释了这种意外行为。 - Louis