簡體   English   中英

如何在多個文件中設置 mocha 測試用例的執行順序

[英]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.jsonnpm腳本:

{
  // ...
  "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM