Mochaを使用して、現在取り組んでいる Node.js API のテストを作成しようとしています。私が書いている現在のテストは、応答が正しいステータス コードで返されているかどうかを確認することだけに関心があります。応答本文は気にしません。
そのため、次のテストを作成しました。
これは実際のテストではないことに注意してください。プロジェクト固有のものを切り取りました。以下のコードでもエラーが発生します。
var http = require('http');
var assert = require("assert");
before(function() {
var server = http.createServer(function(req, res) {
res.end();
}).listen(8080);
});
describe("Convenience Functions", function() {
it("should return a 200 status code", function(done) {
http.get("http://localhost:8080", function(res) {
assert.equal(res.statusCode, 200);
res.on('end', function() {
done();
});
});
});
});
ただし、そのテストを実行すると、Mocha からタイムアウトが発生します。Mocha のデフォルトのタイムアウトは 2000 ミリ秒ですが、それを不必要に高い数値に変更してもタイムアウトする可能性があります。
私はこれと何時間も戦ってきましたが、ついに「修正」を見つけました。テストを次のように変更すると:
describe("Convenience Functions", function() {
it("should return a 200 status code", function(done) {
http.get("http://localhost:8080", function(res) {
assert.equal(res.statusCode, 200);
res.on('data', function() { })
res.on('end', function() {
done();
});
});
});
});
テストがタイムアウトしなくなりました。これら 2 つのテストの唯一の違いは、2 番目のバージョンがdata
応答でイベントを処理していることです。データに対して何もせず、リスナーを定義するだけです。今、私のテストは見事に合格しました。
これは簡単に修正できますが、なぜこれを行う必要があるのかについて非常に混乱しています。を呼び出すとすぐに mocha テストを終了するべきではありませんdone()
か?