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)のコンテンツが最初に実行されます。これらのテストファイルの実行順序を変更するにはどうすればよいですか?
モカには--sort
(短い-S
)テストファイルをソートするオプション:
$ mocha --help
[...]
-S, --sort sort test files
[...]
2番目のファイルでは、最初のファイルが必要です。
--- 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 tests.js
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ファイルを作成し、実行したい各モカテストファイルにdescribe
を追加することでした。
test.js:
describe('test file 1', function() {
require('./test1.js')
})
describe('test file 2', function() {
require('./test2.js')
})
次に、単にmocha test.js
を実行します