【问题标题】:how to run some initialization code with mocha如何使用 mocha 运行一些初始化代码
【发布时间】:2014-11-01 01:53:12
【问题描述】:

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

换句话说,我的文件是这样的

test
  test1.js
  test2.js
  test3.js

我用

运行测试
mocha --recursive

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

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

【问题讨论】:

  • 编写一个模块并在所有地方都需要它?如果这对您有帮助,我会将其发布为答案。
  • 谢谢,但这并不比在每个文件中添加一个before 更好。

标签: javascript mocha.js


【解决方案1】:

这是官方的 mocha 解决方案:

Mocha tests with extra options or parameters

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

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

2 - 仅在 npm 测试之前执行

【讨论】:

    【解决方案2】:

    我最近在我们的节点应用程序中发现了它:

    1. 重组测试文件如下(test/下只有一个js文件“bootstrap.js”,并将所有测试文件放在子文件夹中): 测试 ├──单位 │ ├── test1 │ ├── test2 │ └── ... ├──整合 │ ├── test1 │ ├── test2 │ └── ... ├── bootstrap.js └── mocha.opts
    2. 将“--recursive”放入 mocha.opts
    3. 将您的初始化代码放入 bootstrap.js(全局之前/之后在这里工作!)

    完成。

    【讨论】:

    • 取决于您的文件名。在您的情况下,bootstrap.jsb 开头,所以它是第一个被 --recursive mocha 找到的。
    • 在我找到新方法之前,这是我最喜欢的答案 - 请参阅我的答案(这是官方的 mocha 解决方案)
    【解决方案3】:

    如果只需要初始化代码,那么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”时并没有被初始化。

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 2016-12-17
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多