fis*_*tte 4 node.js npm protractor angular-cli angular
使用 webpack-dev-server 对 prod 包运行 e2e 测试
在 Angular 中,可以使用以下命令针对 prod 构建运行量角器测试
"e2e:prod": "ng e2e --prod"
Run Code Online (Sandbox Code Playgroud)
这将构建 prod 包,启动 webpack-dev-server 并运行量角器。一旦完成,webpack-dev-server 将被关闭。无论如何,这不是我们正在寻找的......见下文
量角器完成后如何关闭节点服务器?
对于我们的持续集成,我们希望 e2e 测试针对节点服务器而不是 webpack-dev-server 运行。所以我们尝试启动节点服务器,然后运行量角器测试。
为此,我们在我们的 ci 服务器执行的 package.json 中引入了一个新脚本:
npm run e2e:ci
Run Code Online (Sandbox Code Playgroud)
解决方案 1 - 同时使用(不工作):
"e2e:ci": "concurrently -k \"npm:e2e:ci:serve\" \"npm:e2e:ci:protractor\"",
"e2e:ci:serve": "node server.js",
"e2e:ci:protractor": "ng e2e --base-url=http://localhost:8080/ --dev-server-target="
Run Code Online (Sandbox Code Playgroud)
这个解决方案几乎有效。有--dev-server-target=没有目标将停止角度打造束(我们对角7)。e2e:ci:serve启动节点服务器,假设 prod 包是在之前构建的,因此可以提供服务。但是- 一旦量角器完成,它将杀死节点服务器,因此它以代码 1 存在:
--> Sending SIGTERM to other processes..
[serve:server] npm run serve:server exited with code 1
npm ERR! code ELIFECYCLE
Run Code Online (Sandbox Code Playgroud)
由于我将并发与-k(kill)一起使用,因此一旦量角器完成,节点服务器就会停止。但是退出代码为 1,所以我们的 ci 假设 e2e 测试失败。
解决方案 2 - 使用 npm-run-all(不起作用)
我们还尝试了 npm-run-all 而不是与种族标志同时进行-r:
"e2e:ci": "npm-run-all -p -r e2e:ci:serve e2e:ci:protractor",
Run Code Online (Sandbox Code Playgroud)
但是一旦量角器完成,这将使服务器运行。所以 e2e 测试永远不会停止。
有人知道如何正确执行此操作吗?要么优雅地关闭节点服务器,要么使用另一种方法来对节点服务器运行 e2e 测试进行归档?
好的,我们终于想出了让它运行的方法npm-run-all -r,至少在 linux 下。我们的 express 服务器需要监听 SIGTERM 信号。一起来:
包.json
"e2e:ci": "npm-run-all -p -r e2e:ci:serve e2e:ci:protractor",
"e2e:ci:serve": "node server.js",
"e2e:ci:protractor": "ng e2e --base-url=http://localhost:8080/ --dev-server-target="
Run Code Online (Sandbox Code Playgroud)
服务器.js
var app = express();
var server = require('http').createServer(app);
server.listen(8080);
process.on('SIGTERM', function () {
server.close(function () {
process.exit(0);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |