Express、Mongoose、およびconfigを使用する REST API サーバーがあります。API の単体テストを行いたいと考えています。基本的に、ポート x で一時 Web サーバーを起動し、ポート y で空の mongo-database を起動し、いくつかの API 呼び出し (gets と puts の両方) を実行し、返されたものを検証してから一時サーバーをシャットダウンし、テストが終了したらテスト データベースをドロップします。 . これを行う最善の方法は何ですか?mocha / rewireを見てきましたが、一時サーバーとデータベースをセットアップする方法がわかりません。また、ベストプラクティスが何であるかもわかりません。
5 に答える
Jenkins (継続的インテグレーション サーバー) とMochaを使用してアプリをテストしましたが、あなたと同じ問題を抱えていることがわかりました。次のシェル コマンドを実行するように Jenkins を構成しました。
npm install
NODE_ENV=testing node app.js &
npm mocha
pkill node
これにより、テストを実行するためにサーバーが実行され、その後、サーバーが強制終了されます。Jenkins は既にポート 8080 を使用しているため、これにより NODE_ENV 環境変数も設定されるため、テスト時に別のポートでサーバーを実行できます。
コードは次のとおりです。
app.js:
...
var port = 8080
if(process.env.NODE_ENV === "testing")
port = 3000;
...
test.js:
var request = require('request'),
assert = require('assert');
describe('Blabla', function() {
describe('GET /', function() {
it("should respond with status 200", function(done) {
request('http://127.0.0.1:3000/', function(err,resp,body) {
assert.equal(resp.statusCode, 200);
done();
});
});
});
});
私が探していたものを正確に見つけました: testrest。私はその .txt ファイルベースの構文が好きではありません - 私は仕様のために代わりに .json ファイルを使用するように適応しました。
Buster.JSを試してみることをお勧めします。非同期テスト、モック/スタブを実行し、サーバーを起動できます。
正しい方法はありませんが、個人用ディレクトリ構造のシード アプリケーションを作成し、@norman784 によって提案された vows テストを含めました。
あなたはそれを複製することができます:git clone https://github.com/hboylan/express-mongoose-api-seed.git
またはnpmで:npm install express-mongoose-api-seed