node.js - 在 Jenkins CI 和 Debian 上使用 ChromeHeadless 的 Karma

标签 node.js npm phantomjs karma-jasmine puppeteer

我们正在使用 Karma & Jasmine 为我们的前端 Node.js 应用程序从 PhantomJS 迁移到 ChromeHeadless。在本地,只需要替换字段即可

browsers: ['PhantomJS'],

browsers: ['ChromeHeadless'],

并在 package.json 中添加条目:

"karma-chrome-launcher": "x.y.z",

然后 npm 构建将采用本地安装的 chrome 浏览器实例来运行 Jasmine 测试。这工作正常。

在我们的 jenkins 构建服务器(在 Debian Jessie 上运行)上,没有安装 chrome,因此无法执行测试。

现在问题:

  • 是否有一个 chrome 的 NPM 包 ,我可以安装它,这样我就不必直接在 debian 机器上安装它了? (类似于phantomjs-prebuilt,在运行实际测试用例之前安装当前的PhantomJS实例)

更新:是的,有 NPM 包 puppeteer,请参阅: https://github.com/GoogleChrome/puppeteer .这将根据当前构建机器获取 chrome 版本。因此,必须添加新条目 package.json 文件(或通过 npm install puppeteer -D 安装):

"puppeteer": "x.y.z",

和 karma.conf:

process.env.CHROME_BIN = require('puppeteer').executablePath();

browsers: ['HeadlessChrome'],
        customLaunchers: {
            HeadlessChrome: {
                base: 'ChromeHeadless',
                flags: ['--no-sandbox']
            }
        },

请注意,对于 Debian,有时必须安装缺少的依赖项。请参阅:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

最佳答案

有比随处捆绑 Chrome 更好的方法来做到这一点。 您可以设置环境变量来告诉 Puppeteer 安装或不安装 Chromium。 所以在本地,继续安装 chromium,但在 CI 服务器上将 env 变量设置为不安装 chromium。

然后您可以获得无浏览器图像并为 CI 服务器 chrome 运行它。 这要好得多的原因是你需要在服务器上安装大量的依赖项才能让 Chromium 工作。使用 Docker 镜像是更好的方法。

请参阅此处的文档: https://docs.browserless.io/docs/docker-quickstart.html

引用本question中的答案!有关如何使用 Selenium Chrome 图像执行此操作的 karma 配置

关于node.js - 在 Jenkins CI 和 Debian 上使用 ChromeHeadless 的 Karma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48923462/

相关文章:

msbuild - npm 失败并显示 "The build tools for VS2010 cannot be found"

phantomjs - 在PhantomJs中下载作为POST请求响应附件的文件

javascript - 如何使用 Phantomjs 向下滚动以加载动态内容

javascript - 如何在 js/node.js 中声明空变量/对象时停止显示容器

javascript - 解析错误: Adjacent JSX elements must be wrapped in an enclosing tag

node.js - Stripe : Whats the different between Source vs. 卡 vs. 银行 vs 付款方式?

node.js - 迁移到 ES6

typescript - 构建和分发 Typescript 项目

javascript - 通过文件://from Vue-cli template打开index.html

javascript - 使用 casper/phantomjs 输出客户端控制台