Đây là một phiên bản đơn giản của ứng dụng nhanh cụm tôi:Làm cách nào để kiểm tra ứng dụng Express được phân cụm với 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);
}
}
/test/test1 .js
var app = require('../');
app.listen(7777);
// send requests to app, then assert the response.
Câu hỏi:
var app = require('../');
sẽ không làm việc trong môi trường cụm này. Ứng dụng công nhân nào sẽ trở lại? Nó có nên trả về đối tượng cụm thay vì ứng dụng Express không?- Bây giờ, thiết lập rõ ràng cổng trong tập lệnh thử nghiệm sẽ không hoạt động. Bạn sẽ đặt một cổng trong một tập lệnh thử nghiệm thành một nhóm ứng dụng như thế nào?
- Bạn sẽ gửi yêu cầu tới nhóm ứng dụng này như thế nào?
Giải pháp duy nhất tôi có thể nghĩ là tắt tính năng phân cụm theo điều kiện và chỉ chạy một ứng dụng nếu ứng dụng được yêu cầu từ tập lệnh thử nghiệm (if (module.parent.parent) ...
).
Bất kỳ cách nào khác để kiểm tra ứng dụng Express được phân cụm với Mocha?
Đây là loại giả trông nguy hiểm bởi vì tôi don' t biết làm thế nào các danh sách đối số sẽ hành xử nếu, ví dụ, ứng dụng được thực hiện trong suốt mãi mãi hoặc pm2 như daemon. – Eye
Bạn biết cách danh sách đối số sẽ hoạt động. [process.argv] (http://nodejs.org/docs/latest/api/process.html#process_process_argv) sẽ luôn chứa 0: "nút" và 1: tập lệnh mà nút đang xử lý. – jbielick
Tôi nghĩ rằng bạn đang bối rối một sợi cpu với một quá trình con nút. Nếu bạn sử dụng màn hình daemon chẳng hạn như mãi mãi, mãi mãi sẽ bắt đầu quy trình tổng thể phù hợp, sau đó sẽ ủy quyền các nhánh khác nhau để chạy ứng dụng của bạn. Nếu một ngã ba vĩnh viễn khởi động ứng dụng của bạn, nó vẫn chạy 'nút app.js' ở trung tâm. Mà sẽ bắt đầu một quá trình nút với 'process.argv' như ['node', 'path/to/app.js']. Nếu bạn sử dụng mocha và viết một đơn vị thử nghiệm để làm một cái gì đó như 'exec ('nút app.js')', process.argv sẽ vẫn là '['nút', 'đường dẫn/đến/app.js' ] '. – jbielick