Ank*_*and 7 javascript testing mocha.js mongodb node.js
我正在尝试用MongodB学习A测试驱动方法.文件夹结构
A user.js在src文件夹中测试
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;
Run Code Online (Sandbox Code Playgroud)
内容 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);
});
Run Code Online (Sandbox Code Playgroud)
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();
});
Run Code Online (Sandbox Code Playgroud)
现在,当我运行npm test测试时,正在通过.
Connected to Mongo!
Creating records
? Saves a user (779ms)
Run Code Online (Sandbox Code Playgroud)
但我怀疑是如何Mocha知道首先运行test_helper.js文件,每次.(同样将此文件命名为任何其他名称不会更改行为).
我也没有使用任何根级钩子.
我知道mocha在每个目录中递归加载文件,从根目录开始,因为这里的所有内容都只是一个目录所以它在这里没有任何区别.
有人可以建议或帮助,Mocha如何确切知道test_helper.js(或任何具有相同内容的文件名)应该先运行.
Mocha加载测试文件的方式没有默认的设置顺序.
当Mocha 扫描目录以查找文件时,它会使用fs.readdirSync.这个调用是一个包装器readdir(3),它本身不保证顺序.现在,由于实现的怪癖,输出fs.readdir和fs.readdirSync排序在Linux(通常可能是POSIX系统)上,而不是在Windows上.此外,Linux上的排序行为有可能最终被删除,因为文档说明fs.readdir的只是readdir(3)后者并不保证顺序.有一个很好的论据可以证明在Linux上观察到的行为是一个错误(请参阅我上面链接的问题).
请注意,有一个--sort选项可以在Mocha找到它们之后对文件进行排序.但默认情况下这是关闭的.
您观察到的行为不仅可以通过加载顺序而且可以通过执行顺序来解释.这是发生的事情:
Mocha加载测试文件并执行它们.因此,任何在你的文件的顶层执行的时候了.这意味着代码立即test_helper.js执行.每次调用都会describe立即执行其回调.但是,调用it记录测试以供以后执行.Mocha 在执行此操作时会发现您的测试,但不会立即执行它们.
一旦执行完所有文件,Mocha就会开始运行测试.到目前为止,代码test_helper.js已经运行,并且您的测试受益于它创建的连接.
主要警告连接到数据库是一种异步操作,目前没有什么能保证test_helper.js在测试开始之前完成异步操作.它现在工作正常只是运气.
如果这是我,我要么将连接创建放在全局异步before钩子中.(任何测试文件中出现的全局 before钩子都会在任何测试之前执行,甚至是在其他文件中出现的测试.)或者我会在保证建立连接后使用--delay并显式调用run()以启动套件.
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |