モカとスーパーテストを使用してテストする、エクスプレスで実行されているhttpsサーバーがあります。
私の問題は、テストのみを実行した場合、問題ありません。テストでgruntfileを実行してからexpressを実行しようとすると、テストファイルでafter()をapp.close()で実行しても、多くのEADDRINUSEエラーが表示されます。同じことがテストの監視タスクにも当てはまります。
これが私の例のテストです:
/* jshint node: true*/
/*global describe, it, after*/
(function() {
'use strict';
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var request = require('supertest');
var app = require('../server.js').app;
var expect = require('chai').expect;
var Cookies;
after(function(done) {
app.close();
setTimeout(function(){done();}, 1500);
});
describe('/login', function() {
it('should auth the user', function(done) {
request(app)
.post('/login')
.send({login: "test", password: 'test'})
.expect(302)
.end(function(err, res) {
expect(err).to.be.equal(null);
expect(res.text).to.be.equal("Moved Temporarily. Redirecting to /");
Cookies = res.headers['set-cookie'].pop().split(';')[0];
done();
});
});
});
// testing API for serving session data for angualar factory
describe('/api/session', function() {
it('should return session data in JSON', function(done) {
var req = request(app).get('/api/session');
req.cookies = Cookies;
req.set('Accept','application/json')
.end(function(err, res) {
expect(err).to.be.equal(null);
expect(res.body).to.have.property("_id");
done();
});
});
});
}());
これらのテストは完璧にはほど遠いことを認識しています。適切なソフトウェア テストの冒険を始めたばかりです。
これらの「既に使用されているポート」はすべて明らかであり、どれも...問題を引き起こしません。すべてのテストは正常に動作し、サーバーは正常に動作しますが、stdout はクレイジーです。このような動作は理想とはほど遠いものであり、おそらく潜在的な問題や不安定性の問題に満ちています。
私の質問は - どうすればそれを取り除くことができますか?
私のアイデアは次のとおりです。
異なるポートだけでテスト用の専用サーバーを作成します。残念ながら、これを実装する方法を知る必要があります。
スーパーエージェントが実行されていない場合にサーバーを実行するための条件を作成するか、それ以外の場合はスーパーエージェントに渡しますか?
スーパーエージェント以外のものを使用します(リクエストなどですが、すべてのCookieとnode_tls_reject_unauthorizedが機能するかどうかはわかりません.
ご覧のとおり、私はそのトピックに苦労しており、答えよりも多くの質問があり、どこを見ればよいかを知るのに十分な経験がありません.
助けていただければ幸いです。
編集:
私ができることがわかりました:
before(function(done) {
app.listen(3001, function() { done(); });
});
これは別のポートでテストを開始しますが...とにかくserver.js全体がロードされるため、とにかく開始します。次に、実行中のサーバーと一緒に起動すると、明らかな EADDRINUSE があります。