web-dev-qa-db-ja.com

複数のファイルでモカテストケースの実行順序を設定する方法

Mochaテストケースを含む2つの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)のコンテンツが最初に実行されます。これらのテストファイルの実行順序を変更するにはどうすればよいですか?

38
tnishada

モカには--sort(短い-S)テストファイルをソートするオプション:

$ mocha --help

[...]
    -S, --sort                              sort test files
[...]
23
Louis

2番目のファイルでは、最初のファイルが必要です。

--- two.js ---
require("./one")

Mochaは、describe呼び出しが実行される順序でテストを実行します。

47
Peter Lyons

これについては、まったく別の解決策に従います。

すべてのテストをtest /という名前のフォルダーに入れ、ルートディレクトリにファイルtests.jsを実行順に作成します

--- tests.js ---
require('./test/one.js')
require('./test/two.js')
require('./test/three.js')

そして、テストファイルにone.js、two.jsなどで簡単なモカテストを記述します

このように、定義した順序で実行したい場合は、mocha tests.js

35

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で覆われているレイヤーの障害です

もちろん、実際のユニットテストを実行している場合、順序は関係ありませんが、ユニットテストを最後まで実行することはほとんどできません。

13
djfm

特定の順序を希望する場合は、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を実行します。

5
David Schneider

テストを特定の順序で実行するための仕組みは、個別のtest.jsファイルを作成し、実行したい各モカテストファイルにdescribeを追加することでした。

test.js:

describe('test file 1', function() {
  require('./test1.js')
})

describe('test file 2', function() {
  require('./test2.js')
})

次に、単にmocha test.jsを実行します

1