如何在多个文件中设置摩卡测试用例的执行顺序
How to set execution order of mocha test cases in multiple files
我有两个包含摩卡测试用例的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)的内容仍然首先执行。如何更改这些测试文件的执行顺序?
在第二个文件中,需要第一个文件:
--- two.js ---
require("./one")
或者,如果您使用的是 ES 模块:
--- two.js ---
import "./one"
Mocha 将按照describe
调用的执行顺序运行测试。
我遵循一个完全独立的解决方案。
将所有测试放在名为 test/和在根目录中按执行顺序创建文件测试.js
--- tests.js ---
require('./test/one.js')
require('./test/two.js')
require('./test/three.js')
并在测试文件中编写一个简单的摩卡测试.js.js
等等这样,如果您想按照定义的顺序运行它们,只需运行mocha tests.js
Mocha 有一个对测试文件进行排序的--sort
(简称-S
)选项:
$ mocha --help
[...]
-S, --sort sort test files
[...]
由于 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
所覆盖的层的错误
如果你在做真正的单元测试,顺序当然无关紧要,但我很少能够一直进行单元测试。
如果您更喜欢特定的顺序,您可以将文件(按顺序)作为命令行参数列出以mocha
,例如:
$ mocha test/test-file-1.js test/test-file-2.js
为了避免每次要运行它时都键入大量内容,您可以在package.json
中将其转换为npm
脚本:
{
// ...
"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
.
以特定顺序执行测试的工作方式是创建一个单独的 test.js 文件,然后为我想执行的每个 mocha 测试文件添加一个describe
。
测试.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 () => {})
})
该回购三年来没有太多活动,但它在 Mocha 9 上运行良好。
- angularjs、因果报应和requirejs测试用例错误
- 我们能在&在块到mocha的特定测试用例(it)之后
- 在Karma Jasmine单元测试用例中检查日期格式
- 正在量角器测试用例中从电子邮件中获取值
- 如何将 XML 文件包含在摩卡测试用例中
- 如何将行数计数分配给另一个值,该值稍后可在Protractor中的测试用例中使用
- 如何在启动Mocha测试用例之前添加延迟
- 如何在nightwach中检索当前测试用例名称
- 如何在多个文件中设置摩卡测试用例的执行顺序
- 如何在断言失败时继续测试用例 在 CasperJS 中
- 为什么在我的量角器测试用例中没有定义网络驱动程序
- 猫鼬模型单元测试 - 如果任何测试用例失败,连接将不会关闭
- 如何在量角器 e2e 测试用例失败时发送电子邮件
- 测试用例在 Chrome 中失败
- 如何在摩卡的测试用例中调用另一个测试用例
- 如何处理单元测试用例的q和promise
- ECMAScript 5日期.ISO 8601测试用例的分析结果
- 如何在运行JEST测试用例时将全局变量设置为true
- 如何在jasmine测试用例中模拟$(element).show和ko.mapping.fromJS
- 用Gulp摩卡测试Angular:“;窗口未定义”;