这是我的集群 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 应用程序吗?- 现在,显然在测试脚本中设置端口是行不通的。您如何将测试脚本中的端口设置为应用程序集群?
- 您将如何向此应用程序集群发送请求?
我能想到的唯一解决方案是有条件地关闭集群功能,如果应用程序是从测试脚本(if (module.parent.parent) ...
)请求的,则只运行一个应用程序。
还有其他方法可以使用 Mocha 测试集群 Express 应用程序吗?