如何使用mocha运行一些初始化代码

时间:2014-09-07 19:54:39

标签: javascript mocha

我了解beforebeforeEachafterafterEach,但如何在所有测试之前运行一些代码。

换句话说,我这样的文件

test
  test1.js
  test2.js
  test3.js

我用

运行测试
mocha --recursive

我不想在每个测试文件中放置before。在执行任何测试之前,我需要一个beforeAllTests--init=setup.js或者我可以执行一些JavaScript的东西。在这种特殊情况下,我必须在测试运行之前配置我的系统的日志记录模块

有没有办法调用一些在所有测试之前执行的init函数?

3 个答案:

答案 0 :(得分:4)

如果只需要初始化代码,那么mocha -r ./init可能就足够了。甚至把它放进test/mocha.opts

--require ./test/init
--ui tdd

但如果您需要拆卸行动,则存在两难问题,例如:

var app = require('../app.js');
app.listen(process.env.WEB_PORT);

after(function(done) {
    var db = mongoskin.db(process.env.DB_URL, {safe:true});
    db.dropDatabase(function(err) {
        expect(err).to.not.be.ok();
        db.close(done);
    });
});

你会收到错误:

ReferenceError: after is not defined

我猜mocha在处理'--require'时尚未初始化。

答案 1 :(得分:3)

我最近在我们的节点应用中找到了它:

  1. 重新组织测试文件,如下所示(只有一个js文件" bootstrap.js"在test /下,并将所有测试文件放在子文件夹中):
       test
       ├──unit
       │  ├── test1
       │  ├── test2
       │  └── ...
       ├──integeration
       │  ├── test1
       │  ├── test2
       │  └── ...
       ├── bootstrap.js
       └── mocha.opts
    
  2. put' - 递归'进入mocha.opts
  3. 将您的初始化代码放入bootstrap.js(全局之前/之后的工作!)
  4. 进行。

答案 2 :(得分:2)

这是官方摩卡解决方案:

Mocha tests with extra options or parameters

它允许您定义可以的代码:

1 - 在npm start和npm test之前执行

2 - 仅在npm测试之前执行