如何在多个文件中设置mocha测试用例的执行顺序
How to set execution order of mocha test cases in multiple files
我有两个 javascript 文件,其中包含 mocha 测试用例。
//----------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)的内容仍然会先执行。如何更改这些测试文件的执行顺序?
在第二个文件中,需要第一个:
--- two.js ---
require("./one")
Mocha 将 运行 按照 describe
调用执行的顺序进行测试。
Mocha 有一个 --sort
(简称 -S
)选项,用于对测试文件进行排序:
$ mocha --help
[...]
-S, --sort sort test files
[...]
我对此采用完全独立的解决方案。
将所有测试放在名为 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
如果您喜欢特定的顺序,您可以将文件(按顺序)列为 mocha
的 command-line 个参数,例如:
$ 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
.
由于 mocha 按字母顺序对文件进行排序,我通常在测试文件名前加上数字,例如:
0 - util.js
1 - something low level.js
2 - something more interesting.js
等等
除了非常容易维护(没有 gulp 咕噜声或任何废话,没有编辑你的 package.json...),它提供的好处是:
- 阅读您的源代码的人会了解您的程序结构,从不太有趣的部分开始,向上移动到业务层
- 当测试失败时,你有一些因果关系的迹象(如果在
1 - something.js
中失败但在 0 - base.js
中没有失败,那么它可能是 [=13 覆盖的层的错误=]
如果你在做真正的单元测试,当然顺序应该无关紧要,但我很少能够一路进行单元测试。
我的测试以特定顺序执行的方法是创建一个单独的 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
我正在导出一个包含所有必需文件的数组,这就是我通过包含所有测试文件的文件夹中的 index.js 文件告诉 mocha 执行顺序的方式:
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
];
mocha-steps 允许您以特定顺序编写 运行 的测试,并在第一次失败时中止 运行。它提供了 it
的直接替代品,称为 steps
.
用法示例:
describe('my smoke test', async () => {
step('login', async () => {})
step('buy an item', async () => throw new Error('failed'))
step('check my balance', async () => {})
xstep('temporarily ignored', async () => {})
})
三年来回购activity很少见,但它在 Mocha 9 上运行良好。
我有两个 javascript 文件,其中包含 mocha 测试用例。
//----------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)的内容仍然会先执行。如何更改这些测试文件的执行顺序?
在第二个文件中,需要第一个:
--- two.js ---
require("./one")
Mocha 将 运行 按照 describe
调用执行的顺序进行测试。
Mocha 有一个 --sort
(简称 -S
)选项,用于对测试文件进行排序:
$ mocha --help
[...]
-S, --sort sort test files
[...]
我对此采用完全独立的解决方案。
将所有测试放在名为 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
如果您喜欢特定的顺序,您可以将文件(按顺序)列为 mocha
的 command-line 个参数,例如:
$ 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
.
由于 mocha 按字母顺序对文件进行排序,我通常在测试文件名前加上数字,例如:
0 - util.js
1 - something low level.js
2 - something more interesting.js
等等
除了非常容易维护(没有 gulp 咕噜声或任何废话,没有编辑你的 package.json...),它提供的好处是:
- 阅读您的源代码的人会了解您的程序结构,从不太有趣的部分开始,向上移动到业务层
- 当测试失败时,你有一些因果关系的迹象(如果在
1 - something.js
中失败但在0 - base.js
中没有失败,那么它可能是 [=13 覆盖的层的错误=]
如果你在做真正的单元测试,当然顺序应该无关紧要,但我很少能够一路进行单元测试。
我的测试以特定顺序执行的方法是创建一个单独的 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
我正在导出一个包含所有必需文件的数组,这就是我通过包含所有测试文件的文件夹中的 index.js 文件告诉 mocha 执行顺序的方式:
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
];
mocha-steps 允许您以特定顺序编写 运行 的测试,并在第一次失败时中止 运行。它提供了 it
的直接替代品,称为 steps
.
用法示例:
describe('my smoke test', async () => {
step('login', async () => {})
step('buy an item', async () => throw new Error('failed'))
step('check my balance', async () => {})
xstep('temporarily ignored', async () => {})
})
三年来回购activity很少见,但它在 Mocha 9 上运行良好。