我在node中创建了一个小型示例应用程序.js在这里进行了单元测试和验收测试
单元测试和验收测试都在摩卡工艺中运行。验收测试从分叉进程开始,基本上在 before() 方法上运行服务器。after() 方法停止进程并
before((initialized) => {
console.log('before script');
serverProcess = child_process.fork('server.js');
serverProcess.on('close', function (code) {
console.log('child process exited with code ' + code);
});
setTimeout(() => {
console.log('1s elapsed');
initialized();
}, 1000);
没有任何延迟的代码适用于我的本地 gitlab-runner,但在服务器上并非总是如此,所以我添加了延迟 - 等待一段时间,直到服务器启动。 根据经验,我发现 1s 就足够了,而 .5s 则不然。 但是,我想知道我应该怎么做才能确保服务器是。
Are there any solutions to run server, execute the tests and shutdown the server that works on Linux, Windows, docker and outside of it?
关于如何在分叉进程之间进行通信,有一个很好的帮助。
这个想法是发送来自孩子的消息,告诉它的父亲(我准备好了!然后爸爸会继续工作。
例:
before((initialized) => {
serverProcess = child_process.fork('server.js');
serverProcess.on('close', function(code) {
console.log('child process exited with code ' + code);
});
serverProcess.on('close', function(code) {
console.log('child process exited with code ' + code);
});
// We add a backup plan. If it takes too long to launch, throw
const timeout = setTimeout(() => {
initialized(new Error('tiemout');
}, 30000);
// Cait for the child to send a message to us
serverProcess.on('message', function(str) {
if (str === 'init done') {
clearTimeout(timeout);
// server.js got successfully initialized
initialized();
}
});
});
// To add inside of your server.js listen
if (process.send) {
process.send("init done");
}