自動化されたシステム/統合テストを作成する場合、すべてのテストが「サーバーを起動する」前に最初のステップを実行するのが一般的です。サーバーの起動にはコストがかかる可能性があるため、個々のテストの前ではなく、一度だけ実行することをお勧めします。JUnit には、これを行うための簡単な機能があります。nodeunit に同等の標準パターンはありますか? それとも手で転がす必要がありますか?
4 に答える
nodeunit を使用するテスト スイートは単なるノード モジュールであるため、グローバル セットアップ/ティアダウンにそのクロージャーを利用できます (そのテスト スイートのみ)。
var myServer = require('./myservermodule');
var testsRun = 0;
var testsExpected = 3;
function startTest(test) {
test._reallyDone = test.done;
test.done = function() {
++testsRun;
test._reallyDone();
};
}
module.exports = {
'setUp' : function(cb) {
if (!myServer.server) myServer.start(cb);
else cb();
},
'tearDown' : function(cb) {
console.log("Tests run: " + testsRun + "/" + testsExpected);
if (testsRun===testsExpected) myServer.stop(cb);
else cb();
},
'sometest1' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
},
'sometest2' : function(test) {
startTest(test);
test.expect(1);
test.ok(false);
test.done();
},
'sometest3' : function(test) {
startTest(test);
test.expect(1);
test.ok(true);
test.done();
}
};
Nodeunit にこれが組み込まれているとは思いませんが、多くの人はそのようなタスクを Grunt で処理しています。
はい、Nodeunit には、テストの前後に常に実行されるasetUp()
および a関数があります。tearDown()
を使用して、次のsetUp()
ようにサーバーを起動できます。
var server = require("path/to/server.js");
exports.setUp = function(callback) {
server.start(8080, function() {
callback();
});
};
// run your tests here, setUp will be called before each of them
これは、server.js に以下があることを前提としています。
exports.start = function() {
// start server here
}
tearDown()
関数test.done()
は呼び出された後に実行されます。
ドキュメントはこちら: https://github.com/caolan/nodeunit#groups-setup-and-teardown
これを行うには、次の 2 つの方法があります。
nodeunit テスト ファイル内のすべてのテストは、順次同期的に実行されます。そのテスト グループのセットアップ コードを最初のテストに配置してから、最後のテストにティアダウンを配置できます。
これをより正式に行いたい場合、および単体テスト用に Grunt をセットアップしたくない場合は、「nodeunit-async」と呼ばれるモジュールもあり、グローバルなセットアップとティアダウンをすべての前後に実行できます。あなたのテスト。テスト グループの前後に、グローバル セットアップとティアダウンを 1 回実行できます。
nodeunit-async の宣伝文句は次のとおりです。
非同期ノードユニット テストを実行するための軽量ラッパー。複数のファイルにわたるテストごとに共通のグローバル セットアップまたはティアダウン関数を実行したい場合、および/またはフィクスチャ セットアップまたはティアダウン関数をすべてのテストの前後に 1 回実行したい場合に特に便利です。
非同期の自動およびウォーターフォール メソッドを使用して記述された単体テスト用に設計されています。