Мне удалось добиться этого с помощью плагина karma-selenium-webdriver-launcher (вместо пользовательского браузера) и использования в качестве изображения селена / автономного хрома (вместо браузера).Я уверен, что этот метод сработал бы и без браузера, но селен дает мне больше возможностей для будущего, таких как различные браузеры и использование сеток селена и т. Д.
Два важных предостережения в том, что имя хоста, которое использует Карма, должноизменить в конфиге на имя хоста, на котором работает vm karma.Другое имя, к которому вы будете относиться, будет где Docker работает.Это также происходит на локальном хосте, поэтому будет использоваться при указании того, где карма ожидает браузер.Теперь, зная, что именно здесь был мой конфигурационный файл кармы, чтобы приступить к работе.
1, еще одна важная вещь, которую следует учитывать, - это случай, когда вы хотите запустить эти тесты на подчиненных jenkins, поэтому жесткое кодирование имени хоста не будет работать.Поэтому вам нужно найти способ получить этот адрес в вашей конфигурации Karma.
const webdriver = require('selenium-webdriver');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('karma-selenium-webdriver-launcher'),
require('@angular-devkit/build-angular/plugins/karma')
],
hostname: 'server_hostname', // Here we need to change from default localhost to the hostname of the server
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true,
reporters : ['coverage'],
preprocessors : {'src/app/*.ts' : 'coverage'}
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_DEBUG,
autoWatch: false,
browsers: ['Chrome-wd'],
customLaunchers: {
'Chrome-wd': {
base: 'SeleniumWebdriver',
browserName: 'Chrome',
getDriver: function() {
return new webdriver.Builder()
.forBrowser('chrome')
.usingServer('http://hostname:4444/wd/hub') // Docker is run using docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome
.build()
}
// flags: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-software-rasterizer', '--disable-dev-shm-usage', '--remote-debugging-port=9222']
}
},
singleRun: true
});
};