为什么 Angular 应用程序的测试应该使用 Chrome 的 --no-sandbox 选项



有关测试 Angular 的信息包括一个示例配置(Karma 和量角器(,其中它禁用了 Chrome 浏览器的沙箱:

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

const config = require('./protractor.conf').config;
config.capabilities = {
  browserName: 'chrome',
  chromeOptions: {
    args: ['--headless', '--no-sandbox']
  }
};
exports.config = config;

为什么呢?为什么不启用沙盒?这样做有充分的理由吗?测试是否必须正常运行?

我不确定为什么示例代码禁用沙盒,但为了它的价值,我们将其保留在我们的测试套件中,一切都很好。 我们曾经像示例一样指定--no-sandbox,但将其删除作为此问题的解决方法,该问题在测试完成后使孤立的 chrome 进程运行。

这是使用容器进行测试的原因之一。

沙盒 出于安全原因,谷歌浏览器无法提供在基于容器的环境中运行时的沙盒。自在基于容器的环境中使用 Chrome,通过 --no-sandbox标志到 Chrome 可执行文件

谷歌浏览器无法移动到新的命名空间