因此,我尝试使用GitLab CI管道在带有Centos 7.5的Docker映像上针对Angular 6应用程序运行Karma测试。
问题是
30 08 2018 07:09:55.222:WARN [启动器]:ChromeHeadless还没有 在60000毫秒内捕获,杀死。 30 08 2018 07:09:55.244:INFO [启动器]:尝试再次启动ChromeHeadless(1/2)。 30 08 2018 07:10:55.264:WARN [发射器]:ChromeHeadless在60000毫秒内未捕获,导致死亡。 30 08 2018 07:10:55.277:INFO [启动器]:尝试再次启动ChromeHeadless(2/2)。 30 08 2018 07:11:55.339:WARN [发射器]:ChromeHeadless在60000毫秒内未捕获,导致死亡。 30 08 2018 07:11:55.355:ERROR [启动器]:ChromeHeadless失败2次(超时)。放弃。 错误:作业失败:退出代码1
我使用import React, { Component } from 'react';
class Login extends Component {
constructor(props) {
super(props);
this.state = {
username: ''
};
this.onChange = this.onChange.bind(this);
}
onChange(e) {
this.setState({ [e.target.name]: e.target.value });
}
render() {
const { username } = this.state;
return (
<input type="text" placeholder="Email" className="form-control" name="username" autoComplete="email" value={username} onChange={this.onChange} />
);
}
}
export default Login;
业力conf:
ng test --browsers ChromeHeadlessNoSandbox --watch=false --code-coverage
还在Image docker文件上,我安装了最新的chrome stable:
browsers: ['Chrome', 'ChromeHeadlessNoSandbox'],
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-gpu',
'--remote-debugging-port=9222',
],
},
},
您是否知道为什么会超时?在本地环境中,它运行完美。
答案 0 :(得分:3)
我已经解决了相同的问题。我的测试服可以在本地计算机上完美运行,但是在docker容器中运行这些测试时,由于连接超时而导致失败。 (我也正在使用Gitlab运行程序,并且我的docker映像基于circleci/node:8.9.2-browsers
)
在研究了这个问题之后,我发现docker bin文件中缺少chrome bin变量路径。所以我通过添加以下内容解决了该问题:
export CHROME_BIN=/usr/bin/google-chrome
到before_script
# TESTING
unit_test_client:
stage: test
before_script:
- export CHROME_BIN=/usr/bin/google-chrome
script:
- npm run test:client
您还可以通过设置CHROME_BIN来解决您的问题
您的业力配置文件顶部的process.env.CHROME_BIN='/usr/bin/google-chrome'
。
在这种情况下,您需要处理在本地计算机上运行测试的情况,可能它应该匹配相同的镶边路径
答案 1 :(得分:0)
您可能想要在Karma尝试启动浏览器之前检查控制台输出。当我的Angular应用程序中存在无效的导入路径时,我在恒定的超时中停留了数小时。业力会在控制台中打印此类错误,但会继续运行浏览器,就像这些错误无关紧要一样。这有点误导,但是在责怪浏览器之前值得检查。
第二,机器性能:偶尔,您可能在第一次启动尝试时会超时,但是下一次尝试会成功。 Dockerization可能会降低您的性能,但影响不大。无头Chrome浏览器即使设置最少也应该可以快速运行。
如果您的浏览器无法安装或无法寻址,那么也应该有与此相关的输出。
答案 2 :(得分:0)
嗨,我以这种方式解决了这个问题:
在我的情况下,客户端具有代理阻止程序来管理网络配置。因此,我在customLauncher标志中将代理作为服务器提供,并且运行良好,但仅在管道中,本地测试停止了。但这只是取消了在本地运行的代理。
之前:通过这种方式,测试可以在本地运行,但不适用于jenkins管道(npm运行测试)
browsers: ['MyChromeHeadless'],
customLaunchers: {
MyChromeHeadless: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--proxy-auto-detect'
]
}
}
之后:通过这种方式,测试可以在管道中运行,但不能在本地运行,因为我不在客户端网络的支持下,如果可以的话,可以访问代理服务器。
browsers: ['MyChromeHeadless'],
customLaunchers: {
MyChromeHeadless: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--proxy-bypass-list=*',
'--proxy-server=http://proxy.your.company'
]
}
}
答案 3 :(得分:0)
我们遇到了同样的问题,并通过在karma.config.js中添加以下标志来解决了该问题
headlessChrome: {
base: "ChromeHeadless",
flags: [
"--no-sandbox",
"--no-proxy-server",
"--disable-web-security",
"--disable-gpu",
"--js-flags=--max-old-space-size=8196", // THIS LINE FIXED IT!!!
],