以下は、私のクラスター Express アプリの簡略版です。
/index.js
module.exports = process.env.CODE_COV
? require('./lib-cov/app')
: require('./lib/app');
/lib/app.js
var cluster = require('cluster'),
express = require('express'),
app = module.exports = express.createServer();
if (cluster.isMaster) {
// Considering I have 4 cores.
for (var i = 0; i < 4; ++i) {
cluster.fork();
}
} else {
// do app configurations, then...
// Don't listen to this port if the app is required from a test script.
if (!module.parent.parent) {
app.listen(8080);
}
}
/test/test1.js
var app = require('../');
app.listen(7777);
// send requests to app, then assert the response.
質問:
var app = require('../');
このクラスター環境では動作しません。どのワーカー アプリを返す必要がありますか? Express アプリの代わりにクラスター オブジェクトを返す必要がありますか?- ここで、明らかにテスト スクリプトでポートを設定しても機能しません。テスト スクリプト内のポートをアプリのクラスターにどのように設定しますか?
- このアプリのクラスターにどのようにリクエストを送信しますか?
考えられる唯一の解決策は、クラスタリング機能を条件付きでオフにし、アプリがテスト スクリプトから要求された場合に 1 つのアプリのみを実行することです ( if (module.parent.parent) ...
)。
クラスター化された Express アプリを Mocha でテストする他の方法はありますか?