如何针对节点服务器而不是webpack-dev-server

时间:2018-11-22 11:08:55

标签: node.js angular npm protractor angular-cli

使用webpack-dev-server对产品捆绑包运行e2e测试

在Angular中,可以使用

对量产版本运行量角器测试
"e2e:prod": "ng e2e --prod" 

这将构建产品捆绑包,启动webpack-dev-server并运行量角器。完成此操作后,将关闭webpack-dev-server。无论如何,这不是我们想要的...见下文

量角器完成后如何关闭节点服务器?

对于我们的持续集成,我们希望e2e测试针对节点服务器而不是webpack-dev-server运行。因此,我们尝试启动节点服务器,然后运行量角器测试。

为此,我们在package.json中引入了一个新脚本,该脚本由ci服务器执行:

npm run e2e:ci

解决方案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="

该解决方案几乎可以工作。使--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

由于我与-k(杀死)并发使用,因此一旦量角器完成,节点服务器就会停止。但是使用退出代码1,因此我们的ci假设e2e测试失败。

解决方案2-使用npm-run-all(不起作用)

我们还尝试了npm-run-all而不是与种族标志-r同时使用:

"e2e:ci": "npm-run-all -p -r e2e:ci:serve e2e:ci:protractor",

但是,一旦量角器完成,这将使服务器继续运行。因此e2e测试永远不会停止。

有人知道如何正确执行此操作吗?要么优雅地关闭节点服务器,要么是另一种归档针对节点服务器运行e2e测试的方法?

1 个答案:

答案 0 :(得分:1)

好吧,我们终于弄清楚了,至少在Linux下,它可以与npm-run-all -r一起运行。我们的快递服务器需要收听SIGTERM信号。在一起:

package.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="

server.js

var app = express();
var server = require('http').createServer(app);
server.listen(8080);

process.on('SIGTERM', function () {
    server.close(function () {
        process.exit(0);
    });
});