如何在多个文件中设置摩卡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。