【发布时间】:2018-08-28 04:02:58
【问题描述】:
似乎 protractor 没有提供任何开箱即用的解决方案来在服务器运行之前启动它。在功能测试运行之前必须运行多个命令是一种糟糕的用户体验,不利于自动化测试。
Angular-cli 有自己的解决方案相当复杂,这个插件声称可以复制它,尽管它对我不起作用并且可能无人维护。 https://www.npmjs.com/package/protractor-webpack
编辑:下面接受了更好的解决方案
我想出了一个使用 child_process.exec 的解决方案,它似乎运行良好,虽然我不太喜欢它。我想分享它以防有人需要它,并看看是否有人能提出更好的解决方案。
在量角器的 beforeLaunch 钩子中启动进程:
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}`)
});
},
然后在配置块上方,我们设置了退出处理程序,以确保服务器在我们完成后被终止。
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杀死的情况。奇怪的是该节点没有提供包含所有这些的事件。
【问题讨论】:
标签: javascript protractor webpack-dev-server