这里是我的集群快速的应用程序的简化版本:如何使用Mocha测试集群快速应用程序?
/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);
}
}
/测试/ 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测试集群快递应用程序?
这种假设看起来很危险,因为我不例如,如果应用程序永远执行或像守护进程一样执行,那么参数列表将如何表现。 – Eye
你知道参数列表将如何表现。 [process.argv](http://nodejs.org/docs/latest/api/process.html#process_process_argv)将始终包含0:“node”和1:节点正在处理的脚本。 – jbielick
我认为你是一个cpu线程与节点子进程混淆。如果您使用守护进程监视器 (如永远),永远会启动相应的主进程,然后将其委托给不同的分支来运行您的应用程序。如果永久分支启动您的应用程序,它仍然在运行 'node app.js'。这会以'process.argv'作为['node','path/to/app.js']启动一个节点进程。 如果你使用mocha并编写一个测试单元来执行'exec('node app.js')',那么process.argv仍然是'['node','path/to/app.js' ]'。 – jbielick