如何在多个文件中设置mocha测试用例的执行顺序

时间:2015-01-30 04:52:19

标签: javascript node.js tdd mocha

我有两个包含mocha测试用例的javascript文件。

//----------abc.js -------------

describe("abc file", function(){
  it("test 1" , function(){
    assert.equal(20 , 20); 
  });
}); 

//---------xyz.js--------------
describe("xyz file", function(){
      it("test 1" , function(){
        assert.equal(10 , 10); 
      });
    });

我把它们放在一个名为test的文件夹中,当我执行mocha命令时,第一个文件(abc.js)总是在xyz.js之前执行。 我认为这可能是由于按字母顺序排列并将文件重命名为

abc.js => xyz.js
xyz.js => abc.js

但是,仍然首先执行xyz.js(先前的abc.js)的内容。如何更改这些测试文件的执行顺序?

7 个答案:

答案 0 :(得分:45)

在第二个文件中,需要第一个文件:

--- two.js ---
require("./one")

Mocha将按照describe调用执行的顺序运行测试。

答案 1 :(得分:31)

我遵循完全独立的解决方案。

将所有测试放在名为test /的文件夹中 按执行顺序在根目录中创建文件tests.js

--- tests.js ---
require('./test/one.js')
require('./test/two.js')
require('./test/three.js')

在测试文件中,one.js,two.js等编写简单的mocha测试

这样,如果你想按照你定义的顺序运行它们,那么只需运行mocha tests.js

答案 2 :(得分:22)

Mocha有一个--sort(短-S)选项可对测试文件进行排序:

$ mocha --help

[...]
    -S, --sort                              sort test files
[...]

答案 3 :(得分:12)

由于mocha按字母顺序对文件进行排序,因此我通常在测试文件名称前加上数字,例如:

  • 0 - util.js
  • 1 - something low level.js
  • 2 - something more interesting.js

除了非常容易维护(没有咕噜咕噜声或任何废话,不编辑你的package.json ......),它还提供以下好处:

  • 阅读源代码的人会了解程序的结构,从不太有趣的部分开始,然后进入业务层
  • 当测试失败时,您有一些因果关系的迹象(如果1 - something.js中的某些内容失败但0 - base.js中没有失败则可能是1 - something.js覆盖的层的错误

如果您正在进行真正的单元测试,那么顺序无关紧要,但我很少能够一直进行单元测试。

答案 4 :(得分:5)

如果您更喜欢特定订单,可以将文件(按顺序)列为mocha的命令行参数,例如:

$ mocha test/test-file-1.js test/test-file-2.js

为避免每次要运行时输入大量内容,您可以将其转换为npm中的package.json脚本:

{
  // ...
  "scripts": {
    "test": "mocha test/test-file-1.js test/test-file-2.js"
  }
  // ...
}

然后从命令行运行您的套件:

$ npm test

或者,如果您正在使用Gulp,则可以在gulpfile.js中创建任务:

var gulp = require('gulp');
var mocha = require("gulp-mocha");

gulp.task("test", function() {
  return gulp.src([
      "./test/test-file-1.js",
      "./test/test-file-2.js"
    ])
    .pipe(mocha());
});

然后运行$ gulp test

答案 5 :(得分:0)

按特定顺序执行测试的工作方式是创建一个单独的test.js文件,然后为要执行的每个Mocha测试文件添加一个describe

test.js:

describe('test file 1', function() {
  require('./test1.js')
})

describe('test file 2', function() {
  require('./test2.js')
})

然后只需运行mocha test.js

答案 6 :(得分:0)

我正在导出包含所有必需文件的数组,这就是通过包含所有测试文件的文件夹中的index.js文件告诉摩卡咖啡执行顺序的方式:

const Login = require('../login');
const ChangeBudgetUnit = require('./changeBudgetUnit');
const AddItemsInCart = require('./addItemsInCart'); 

// if the order matters should export array, not object
module.exports = [
    Login,
    ChangeBudgetUnit,
    AddItemsInCart
];