express.jsを使用して単純なWebアプリケーションを作成し、jasmine-nodeでテストしたいと思います。これまでのところうまく動作しますが、私の問題は、テストを実行する前に毎回手動でサーバーを起動する必要があることです。Jasmine-Nodeとexpress.jsを自動化
テストのためだけにサーバーを(別のポートで開発したものを使用して)実行した後、それを強制終了するスペックヘルパーを作成する方法を教えてください。
express.jsを使用して単純なWebアプリケーションを作成し、jasmine-nodeでテストしたいと思います。これまでのところうまく動作しますが、私の問題は、テストを実行する前に毎回手動でサーバーを起動する必要があることです。Jasmine-Nodeとexpress.jsを自動化
テストのためだけにサーバーを(別のポートで開発したものを使用して)実行した後、それを強制終了するスペックヘルパーを作成する方法を教えてください。
は、これは私が何をすべきかです:
私はノードアプリを設定し、私のノードプロジェクトのルート内部server.jsファイルを持っていますlicationの(速達付き)、サーバと輸出の2つの方法:
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 });
だから、ファイル/フォルダの基本的な構造は次のようになります01::この分離は普段サーバを実行できるようになります持っ
src
app.js
server.js
node src/app.js
.. および/またはこのようなテストを実行したノードのスクリプト(またはジェイク/イサキ/何でもタスク)可能性があり、カスタムノードのスクリプトから、それを必要とする:
/** 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();
}
});
これまでのところ、私はそれを得ました。あなたが私のテスト出力のすべてのサーバー出力(例:_GET/200 46ms - 167_)をなくす方法を教えてくれれば:)# – optikfluffel
あなたのリクエストを記録するノードサーバーアプリケーションに何か設定されているようですが、明示的なプロファイラミドルウェアですか?エクスプレスサーバーコードを確認してください;) – BFil
申し訳ありませんが、忘れてしまったapp.use(express.logger( 'dev'))が見つかりました。ありがとう^^ – optikfluffel
私はモカを使用していますが、同様の原則が適用されます。 app.js
ファイルをメインのdescribe
の 'beforeEach'フックで試すことができます。それはあなたのためにそれを起動する必要があります。
OKこれは起動してテストが実行されていますが、--autotestオプションを使用すると停止しません。同様に、テストを一度だけ実行したい場合は停止しません。私はテスト出力にhttp出力(GET/200 6ms - 167)を持っています。どのように私はこれを取り除くのですか? – optikfluffel
あなたはこれの例がありますか? – chovy
出力の例を次に示します。http://pastebin.com/9qF1NeU1 、ここではserver_spec.coffee:http:// pastebinです。com/uvcBuTiy – optikfluffel
あなたはserver.jsでapp.listen()
を呼び出すいくつかのコードを使用すると仮定すると、各実行上のファイルを必要としますが、一度だけ、その後
startServer = -> app.listen(3000)
stopServer = -> app.close()
のような二つの機能を持っていないそして、あなたはbeforeEach
でこれらを使用することができますし、 afterEach
は動作しません。@ ShadowCloudのスニペットは素敵です:) – optikfluffel
あなたが開発している間、あなたのテストを自動化するにはさらに一歩に行きたい場合は、あなたがあなたの端末回線に行き、ジャスミンは、リスト滞在する
jasmine-node . --autotest
を実行することができますプロジェクト内のすべてのファイルに適用され、変更するたびにそのコードがテストを破るかどうかがわかります;
実行中のExpressのバージョンは何ですか? – srquinn
私はバージョン3.x(現在は3.0.2)を使用しています。 – optikfluffel