如何在多个文件中设置摩卡testing用例的执行顺序

我有两个包含摩卡testing用例的java脚本文件。

//----------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)首先被执行。 我想知道如何改变这些testing文件的执行顺序。

摩卡有一个--sort (短-S )选项来sortingtesting文件:

 $ mocha --help [...] -S, --sort sort test files [...] 

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

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

摩卡将按照describe调用的执行顺序运行testing。

我遵循完全独立的解决scheme。

把所有的testing放到一个名为test /的文件夹中,然后按照执行顺序在根目录下创build一个文件tests.js

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

而在testing文件one.js,two.js等写你的简单的摩卡testing

这样如果你想以你定义的顺序运行它们,那么就运行mocha tests.js

如果你喜欢特定的顺序,你可以列出文件(按顺序)作为mocha命令行参数,例如:

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

为了避免每次运行时都input很多内容,可以在package.json中将其转换为npm脚本:

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

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

 $ npm test 

或者如果你使用Gulp,你可以在你的gulpfile.js创build一个任务:

 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

由于摩卡按字母顺序对文件进行sorting,所以我通常在testing文件名称前加上数字,如:

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

等等

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

  • 阅读你的源代码的人可以了解你的程序的结构,从不那么有趣的部分开始,到业务层
  • 当一个testing失败的时候,你有一些因果关系的指示(如果某个东西失败1 - something.js但是在0 - base.js中没有失败,那么它可能是由1 - something.js覆盖的层的错误

如果您正在进行真正的unit testing,顺序不重要,但我很less能够一路进行unit testing。