這裏是我的集羣快速的應用程序的簡化版本:如何使用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