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

Why should tests of an Angular application use the --no-sandbox option of Chrome

关于 testing Angular 的信息包括一个示例配置(Karma 和 Protractor),其中禁用了 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,但将其删除作为 this issue 的解决方法,这在测试完成后留下孤立的 chrome 进程 运行。

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

Sandboxing For security reasons, Google Chrome is unable to provide sandboxing when it is running in the container-based environment. To use Chrome in the container-based environment, pass the --no-sandbox flag to the chrome executable