2016-08-09 18 views
0

npmでテストを呼び出してNode.jsサーバーを起動してから、testコマンドを実行するときのベストプラクティス方法は何ですか?私はpackage.jsonに次のことを試していますが、失敗しています。注:node api.jsをバックグラウンドで起動してから、jasmine-nodeコマンドが終了した後で終了します。Node.jsサーバー起動時のnpmテスト

"scripts": { 
    "test": "node api.js & && jasmine-node test" 
} 
+0

あなたはあなたのテストの中でアプリを起動すると考えましたか? – Seth

答えて

1

あなたは、このように、あなたのサーバが(エージェントを設定)をシミュレートし、テストが行​​われたときに、それをシャットダウンし、Supertestで試してみることができます。これにより、テストが完了した後にサーバープロセスをシャットダウンするという面倒なハックも回避されます。

編集:

var request = require('supertest'); 
var express = require('express'); 

var app = express(); 

app.get('/user', function(req, res) { 
    res.status(200).json({ name: 'tobi' }); 
}); 

request(app) 
    .get('/user') 
    .expect('Content-Type', /json/) 
    .expect('Content-Length', '15') 
    .expect(200) 
    .end(function(err, res) { 
    if (err) throw err; 
    }); 
むしろfrisbyよりsupertestの利点は、あなたが設定アプリのオブジェクトからエージェント(例はsupertest READMEからである)ことができ、あなたは完全なURIをコールする必要がないことです
+0

私はすでにそれを行うには、とにかくhttp://frisbyjs.com/(frisby)を使用していますか? – Justin

+0

Frisbyで明示的なURIを呼び出さなければならないようです。 supertestを使用すると、独自のエージェントをセットアップできます(回答の編集を参照)。 – Cyril

0

これを処理するための単純なbashスクリプトbin/test-runner.bashを書き終えました。

#!/usr/bin/env bash 
set -eo pipefail; [[ $TRACE ]] && set -x 

node api.js & SERVER_PID=$! 
sleep 1 
jasmine-node test 
kill "$SERVER_PID" 

次に./bin/test-runner.bashpackage.jsonテストコマンドを修正しました。唯一の醜いのは、任意のスリープコマンドですが、今のところ一貫して動作します。

関連する問題