express.jsを使用して簡単なWebアプリを作成し、 jasmine-nodeでテストしたいと思います。これまでのところ正常に動作していますが、私の問題は、テストを実行する前に毎回手動でサーバーを起動する必要があることです。
テストのためだけにサーバーを(別のポートで、次に開発用のポートで)実行し、後でサーバーを強制終了するスペックヘルパーを作成する方法について教えてください。
express.jsを使用して簡単なWebアプリを作成し、 jasmine-nodeでテストしたいと思います。これまでのところ正常に動作していますが、私の問題は、テストを実行する前に毎回手動でサーバーを起動する必要があることです。
テストのためだけにサーバーを(別のポートで、次に開発用のポートで)実行し、後でサーバーを強制終了するスペックヘルパーを作成する方法について教えてください。
これが私がすることです:
ノードアプリケーションサーバーをセットアップし(高速で)、2つのメソッドをエクスポートするノードプロジェクトのルート内にserver.jsファイルがあります。
exports.start = function( config, readyCallback ) {
if(!this.server) {
this.server = app.listen( config.port, function() {
console.log('Server running on port %d in %s mode', config.port, app.settings.env);
// callback to call when the server is ready
if(readyCallback) {
readyCallback();
}
});
}
};
exports.close = function() {
this.server.close();
};
この時点で、 app.jsファイルは単純になります。
var server = require('./server');
server.start( { port: 8000 } );
したがって、ファイル/フォルダーの基本構造は次のようになります。
src
app.js
server.js
この分離により、サーバーを正常に実行できます。
node src/app.js
..および/またはカスタム ノード スクリプトからそれを要求します。これは、次のようにテストを実行するノード スクリプト (または jake/grunt/whatever タスク) である可能性があります。
/** my-test-task.js */
// util that spawns a child process
var spawn = require('child_process').spawn;
// reference to our node application server
var server = require('./path/to/server.js');
// starts the server
server.start( { port: 8000 }, function() {
// on server ready launch the jasmine-node process with your test file
var jasmineNode = spawn('jasmine-node', [ '.path/to/test/file.js' ]);
// logs process stdout/stderr to the console
function logToConsole(data) {
console.log(String(data));
}
jasmineNode.stdout.on('data', logToConsole);
jasmineNode.stderr.on('data', logToConsole);
jasmineNode.on('exit', function(exitCode) {
// when jasmine-node is done, shuts down the application server
server.close();
}
});
私は Mocha を使用していますが、これは非常によく似ていますが、同じ原則が適用されるはずです。 main 内の「beforeEach」フックでファイルを試すrequire
ことができます。それはあなたのためにそれを起動するはずです。app.js
describe
server.jsで呼び出すコードを使用すると仮定するとapp.listen()
、実行ごとにファイルを必要とせず、1回だけ必要とし、次のような2つの関数を用意します
startServer = -> app.listen(3000)
stopServer = -> app.close()
beforeEach
次に、これらを使用できますafterEach
開発中にテストを自動化するためにさらに一歩進みたい場合は、ターミナルラインに移動して実行できます
jasmine-node . --autotest
その後、Jasmine はプロジェクト内のすべてのファイルをリッスンし続け、ファイルに変更を加えるたびに、そのコードの一部がテストに違反しているかどうかを通知します;)