为什么 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
关于 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