我有两个包含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)的内容。如何更改这些测试文件的执行顺序?
答案 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
];