关于angular:解决多project的angular应用单元测试报-ChromeHeadlessCI未注册的错误

3次阅读

共计 1280 个字符,预计需要花费 4 分钟才能阅读完成。

此文章解决 angular 在单元测试时报:Cannot load browser “ChromeHeadlessCI”: it is not registered! 谬误。

angular 在开发环境中的单元测试默认是基于 chrome 浏览器的,但在 CI 过程中的环境往往并没有桌面环境,没有桌面环境也就意味着无奈在 CI 中运行 chrome 浏览器。这时候则须要一个能够在非桌面环境下运行的 chrome 浏览器:chromium。

同时又因为 chromium 默认在非 root 权限(sandbox)下运行,而咱们 CI 时借助了 docker 容器,这个容器在运行时又是 root 权限,所以咱们在 CI 的进行单元测试的过程中,则须要退出no-sandbox 的参数。

karma.conf

angular 的单元测试由 karma 负责启动,咱们须要的实用于 CI 的无头浏览器也须要配置在这,找到配置文件,批改以下几行:

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

上述配置的作用是减少一个自定义的浏览器类型ChromeHeadlessCI,这个名字轻易起。上面简略对配置做下阐明:

    browsers: ['Chrome'],
    customLaunchers: {  // 自定义启动器
      ChromeHeadlessCI: { // 自定义一个名字为 ChromeHeadlessCI 的启动器
        base: 'ChromeHeadless', // 基于 ChromeHeadless
        flags: ['--no-sandbox'] // 在 ChromeHeadless 的根底上,减少 --no-sandbox 参数,这样就能够在 root 下运行了
      }
    },

命令

如果咱们以后开发的是历史的我的项目,则新的 angular cli 与原我的项目中应用的 angular cli 必然会产生对 node.js 依赖的版本抵触。这时候咱们就不要去应用本地全局的 angular cli 了,改用 node_modules/@angular/cli/bin/ng 会好很多。最初因为在 CI 时咱们在为其退出--no-watch,以便能够顺利完结测试,最终的命令大体如下:

# node_modules/@angular/cli/bin/ng test wechat -- --no-watch --no-progress --browsers=ChromeHeadlessCI

多 project

如果你的 angular 也是一个多 project 的我的项目,那么须要留神的是每个子项目(比方你有一个 web, 一个 lib,还有一个 wechat)都能够对应惟一的配置文件,至于这个配置文件在哪,则须要去 angular.json 中去查看:

        "test": {
          "options": {"karmaConfig": "file/path/of/karma.conf.js",

在执行 CI 测试,举荐多写几条命令别离测试几个 project,这样以来具体哪个 project 的配置文件有问题便能够高深莫测了。

正文完
 0