[英]How to set execution order of mocha test cases in multiple files
我有兩個包含 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)的內容。 如何更改這些測試文件的執行順序?
在第二個文件中,需要第一個:
--- two.js ---
require("./one")
Mocha 將按照describe
調用執行的順序運行測試。
我遵循一個完全獨立的解決方案。
將所有的測試放在一個名為 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 有一個--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
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 () => {})
})
該 repo 三年來沒有太多活動,但它在 Mocha 9 上運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.