我正在尝试用MongodB学习A测试驱动方法.文件夹结构

要在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测试时,测试正在通过.

Connected to Mongo!
  Creating records
    √ Saves a user (779ms)

但我怀疑Mocha是如何知道首先运行test_helper.js文件的. (同样将此文件命名为任何其他名称不会更改行为).

我也没有使用任何根级钩子.

我知道mocha在每个目录中递归加载文件,从根目录开始,因为这里的所有内容都只是一个目录所以它在这里没有任何区别.

有人可以建议或帮助,Mocha如何确切知道test_helper.js(或任何具有相同内容的文件名)应该先运行.

解决方法

Mocha加载测试文件的方式没有默认的设置顺序.

当Mocha scans a directory找到它的文件时,它使用fs.readdirSync.这个调用是readdir(3)左右的包装,它本身不保证顺序.现在,由于implementation quirk,fs.readdir和fs.readdirsync的输出在Linux(通常可能是POSIX系统)上排序,但在Windows上排序.此外,最终可能会删除Linux上的排序行为,因为文档说fs.readdir只是readdir(3)而后者不保证顺序.有一个很好的论据可以证明在Linux上观察到的行为是一个错误(请参阅我上面链接的问题).

请注意,有一个–sort选项可以在Mocha找到它们之后对文件进行排序.但默认情况下这是关闭的.

您观察到的行为不仅可以通过加载顺序而且可以通过执行顺序来解释.这是发生的事情:

> Mocha加载测试文件并执行它们.因此,文件顶层的任何内容都会立即执行.这意味着test_helper.js中的代码会立即执行.每次调用的调用都会立即执行其回调.但是,调用它会记录测试以便以后执行. Mocha在执行此操作时会发现您的测试,但不会立即执行它们.
>一旦执行完所有文件,Mocha就会开始运行测试.到目前为止,test_helper.js中的代码已经运行,并且您的测试会从它创建的连接中受益.

主要警告连接到数据库是一种异步操作,目前没有什么能保证test_helper.js中的异步操作在测试开始之前就已完成.它现在工作正常只是运气.

如果这是我,我要么在挂钩之前将连接创建放在全局异步中. (在任何测试文件中出现的全局挂钩将在任何测试之前执行,甚至是在其他文件中出现的测试.)或者我use --delay并且在保证建立连接后显式调用run()来启动套件.

javascript – Mocha如何知道在测试套件中首先加载哪个文件的更多相关文章

  1. NodeJs测试框架Mocha的安装与使用

    本文全面介绍如何使用Mocha,让你轻松上手。如果你以前对测试一无所知,本文也可以当作JavaScript单元测试入门。

  2. mocha的时序规则讲解

    今天小编就为大家分享一篇关于mocha的时序规则讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. NodeJs下的测试框架Mocha的简单介绍

    本篇文章主要介绍了NodeJs下的测试框架Mocha的简单介绍,是目前最为流行的javascript框架之一,在本文我们重点介绍它在NodeJs上的使用。有兴趣的可以了解一下。

  4. NodeJS测试框架mocha入门教程

    本文给大家简单介绍了NodeJS里最常用的测试框架--mocha的安装以及简单的使用方法,支持直接在browser上跑Javascript代码测试,这里推荐给大家

  5. 单元测试 – 如何使用Mocha测试AngularJS代码?

    基本上,我有相当丰富的Mocha,我是新的AngularJS。现在我想知道我如何单元测试所有AngularJS的东西使用摩卡。我知道Mocha在浏览器中运行,我已经这样做了。但是如何构建和设置东西?我需要为$scope创建mock,$http&公司为自己,还是有一些帮助?请注意,我知道有Karma测试跑者,但我不想切换我的测试跑步者完全。一种方法是在测试中使用Angular$injector:myModule_test.js你的html应该看起来像这样:

  6. angularjs – 如何用Mocha测试Angular 2?

    几天来我一直在反对这个问题,而且无法到达任何地方……我正在尝试使用Mocha来测试我的Angular2应用程序,我就可以’弄清楚如何获取控制器的实例.我正在尝试我能提出的最简单的案例;正如我所知,console.log以某种方式失败,因为我的gulp-mocha任务刚刚死亡(默默地).注释掉bootstrap引用只是做一个虚拟测试;按照我的预期记录未定义.有没有人设法得到这样的东西工作?

  7. javascript – res.should.have.status给了我错误

    我是mocha和should.js的新手.我正在尝试检查响应的状态,但它给了我TypeError:Object#没有方法’status’代码是这样的:我也注意到虽然我声明了varshould=require;,我的ide告诉我’should’是一个未使用的局部变量.我真的不知道为什么.解决方法尝试要么关于“’should’是一个未使用的局部变量”.这是真的.你不要直接使用.只有副作用.尝试require;代替.

  8. javascript – mocha init超时与mocha-phantomjs

    我有以下testrunner.html:_runner.js如下所示:StringCalculator.specs.js是这样的:这是StringCalculator.js本身(从摩卡样本):当在浏览器中调用testrunner.html运行规范时,一切都按预期运行.在OSX上运行mocha-phantomjsclient/specs/testrunner.html时,会收到以下错误信息:无法启动

  9. angularjs – 执行gulp任务时无法在karma配置文件上加载“mocha”框架

    在执行gulptest-browser命令时,我收到了以下警告消息WARN[reporter]:Cannotload“mocha”,itisnotregistered!但如果我执行karmastart命令它工作正常,它不会显示任何警告信息.为什么我收到此警告消息?我在这里错过了什么?

  10. javascript – 在使用带有RequireJS和Mocha的Squire.js时,如何避免引入全局泄漏?

    我正在使用Backbone和Backbone.Marionette编写单页JavaScript应用程序.我使用AMD模块和RequireJS来帮助组织我的代码和管理依赖项.我也使用Mocha作为TDD/BDD的测试框架.一切都工作正常,直到我想使用Sinon.JS引入存根,模拟和间谍.经过大量的搜索,我在testframeworksintheRequireJSwiki和Squire.js看到了一个

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部