gpt4 book ai didi

javascript - 如何在 Protractor 运行之前启动服务器并在之后进行清理

转载 作者:行者123 更新时间:2023-11-30 14:43:02 24 4
gpt4 key购买 nike

Protractor 似乎没有提供任何开箱即用的解决方案来在服务器运行之前启动它。在功能测试运行之前必须运行多个命令是一种糟糕的用户体验,也不利于自动化测试。

Angular-cli 有它自己的相当复杂的解决方案,这个插件声称可以复制它,尽管它对我不起作用并且可能没有维护。 https://www.npmjs.com/package/protractor-webpack

编辑:下面接受了更好的解决方案

我想出了一个使用 child_process.exec 的解决方案,虽然我不太喜欢它,但它似乎运行良好。我想分享它以防万一有人需要它,看看是否有人能提出更好的解决方案。

在 Protractor 的 beforeLaunch 钩子(Hook)中启动进程:

beforeLaunch: () => {
webpackServerProcess = exec(`webpack-dev-server --port=3003 --open=false`, null, () => {
console.log(`Webpack Server process reports that it exited. Its possible a server was already running on port ${port}`)
});
},

然后在配置 block 上方,我们设置了退出处理程序,以确保服务器在我们完成后被杀死。

let webpackServerProcess; // Set below in beforeLaunch hook
function cleanUpServer(eventType) {
console.log(`Server Cleanup caught ${eventType}, killing server`);
if (webpackServerProcess) {
webpackServerProcess.kill();
console.log(`SERVER KILLED`);
}
}

[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`].forEach((eventType) => {
process.on(eventType, cleanUpServer.bind(null, eventType));
})

需要各种事件监听器来处理 cntrl+c 事件和进程被 ID 杀死的情况。奇怪的是节点没有提供包含所有这些的事件。

最佳答案

Protractor 也有 onCleanUp,它将在文件中的所有规范完成后运行。

您通过保留对您的进程的引用来做正确的事情,以便您以后可以终止它。

let webpackServerProcess;
beforeLaunch: () {
webpackServerProcess = exec('blah'); // you could use spawn instead of exec
},
onCleanUp: () {
process.kill(webpackServerProcess.pid);
// or webpackServerProcess.exit();
}

由于您正在使用 child_process.exec 启动 serverProcess,而不是处于分离状态,如果主进程被 SIGINT 或其他任何东西杀死,它应该会消失。因此,您甚至不必杀死它或进行清理。

关于javascript - 如何在 Protractor 运行之前启动服务器并在之后进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com