A Karma plugin that provides browser launchers for Chrome, Chrome Canary, Chromium, and Dartium browsers for JavaScript testing.
npx @tessl/cli install tessl/npm-karma-chrome-launcher@3.1.0Karma Chrome Launcher is a Karma plugin that provides browser launchers for Chrome, Chrome Canary, Chromium, and Dartium browsers. It enables JavaScript testing in various Chrome-based browser environments including headless mode, making it essential for cross-browser testing workflows and continuous integration pipelines.
npm install --save-dev karma-chrome-launcher// The package exports Karma DI modules, typically used via Karma configuration
const karmaChromeLauncher = require('karma-chrome-launcher');
// Or when installed as a plugin, Karma loads it automatically:
// plugins: ['karma-chrome-launcher']// karma.conf.js
module.exports = function(config) {
config.set({
// Basic browser configuration
browsers: ['Chrome', 'ChromeHeadless'],
// Custom launcher with flags
customLaunchers: {
Chrome_without_security: {
base: 'Chrome',
flags: ['--disable-web-security', '--disable-site-isolation-trials']
},
Chrome_with_debugging: {
base: 'Chrome',
chromeDataDir: path.resolve(__dirname, '.chrome')
}
},
// Include the plugin
plugins: [
'karma-chrome-launcher',
// other plugins...
]
});
};The package provides Karma dependency injection modules for launching different Chrome-based browsers.
// Main module exports - Karma DI configuration object
module.exports = {
'launcher:Chrome': ['type', ChromeBrowser],
'launcher:ChromeHeadless': ['type', ChromeHeadlessBrowser],
'launcher:ChromeCanary': ['type', ChromeCanaryBrowser],
'launcher:ChromeCanaryHeadless': ['type', ChromeCanaryHeadlessBrowser],
'launcher:Chromium': ['type', ChromiumBrowser],
'launcher:ChromiumHeadless': ['type', ChromiumHeadlessBrowser],
'launcher:Dartium': ['type', DartiumBrowser]
};Each launcher supports the following configuration options:
interface LauncherArgs {
/** Array of command-line flags to pass to the browser */
flags?: string[];
/** Custom Chrome user data directory path (overrides default temp directory) */
chromeDataDir?: string;
}
/** Browser launcher constructor function signature */
type BrowserLauncher = (baseBrowserDecorator: Function, args: LauncherArgs) => void;
/** Browser launcher prototype with required properties */
interface BrowserPrototype {
/** Browser name identifier */
name: string;
/** Platform-specific default command paths */
DEFAULT_CMD: {
linux?: string | null;
darwin?: string | null;
win32?: string | null;
};
/** Environment variable name for binary path override */
ENV_CMD: string;
/** Internal method to generate browser command-line options */
_getOptions(url: string): string[];
}Standard Chrome browser launcher for desktop testing.
// Used in Karma configuration
browsers: ['Chrome']
// Environment variable override
CHROME_BIN=/path/to/chrome karma startPlatform Support:
google-chrome or google-chrome-stable/Applications/Google Chrome.app/Contents/MacOS/Google ChromeDefault Flags Added: Chrome automatically adds these flags to all instances:
--user-data-dir=<temp-dir>
--enable-automation
--no-default-browser-check
--no-first-run
--disable-default-apps
--disable-popup-blocking
--disable-translate
--disable-background-timer-throttling
--disable-renderer-backgrounding
--disable-device-discovery-notificationsChrome browser in headless mode for CI/CD environments.
// Used in Karma configuration
browsers: ['ChromeHeadless']
// Automatically adds headless flags:
// --headless, --disable-gpu, --disable-dev-shm-usage
// --remote-debugging-port=9222 (if not already specified)Chrome Canary browser launcher for testing with bleeding-edge Chrome features.
// Used in Karma configuration
browsers: ['ChromeCanary']
// Environment variable override
CHROME_CANARY_BIN=/path/to/chrome-canary karma start
// Automatically adds performance flags:
// --js-flags=--nocrankshaft --nooptChrome Canary browser in headless mode.
// Used in Karma configuration
browsers: ['ChromeCanaryHeadless']Open-source Chromium browser launcher.
// Used in Karma configuration
browsers: ['Chromium']
// Environment variable override
CHROMIUM_BIN=/path/to/chromium karma startPlatform Support:
chromium-browser or chromium/Applications/Chromium.app/Contents/MacOS/ChromiumDefault Flags Added: Chromium automatically adds these flags to all instances:
--user-data-dir=<temp-dir>
--no-default-browser-check
--no-first-run
--disable-default-apps
--disable-popup-blocking
--disable-translate
--disable-background-timer-throttlingNote: Chromium does not include the --enable-automation, --disable-renderer-backgrounding, and --disable-device-discovery-notifications flags that Chrome includes.
Chromium browser in headless mode.
// Used in Karma configuration
browsers: ['ChromiumHeadless']Legacy Dartium browser launcher for Dart applications. Note: Dartium is obsolete as Dart web development now uses standard browsers.
// Used in Karma configuration
browsers: ['Dartium']
// Environment variable override
DARTIUM_BIN=/path/to/dartium karma start// karma.conf.js
customLaunchers: {
Chrome_without_security: {
base: 'Chrome',
flags: [
'--disable-web-security',
'--disable-site-isolation-trials',
'--allow-running-insecure-content'
]
}
}// karma.conf.js
const path = require('path');
customLaunchers: {
Chrome_with_debugging: {
base: 'Chrome',
chromeDataDir: path.resolve(__dirname, '.chrome')
}
}The launcher provides special handling for --js-flags parameters:
customLaunchers: {
Chrome_with_js_flags: {
base: 'Chrome',
flags: ['--js-flags="--expose-gc --harmony"']
}
}// karma.conf.js
process.env.CHROME_BIN = require('puppeteer').executablePath();
module.exports = function(config) {
config.set({
browsers: ['ChromeHeadless']
});
};The package also exports test utilities for internal function testing:
// Available on module.exports.test
const testUtils = require('karma-chrome-launcher').test;
/**
* Check if a flag is a JS flags parameter
* @param {string} flag - Command line flag to check
* @returns {boolean} True if flag starts with --js-flags=
*/
function isJSFlags(flag);
/**
* Sanitize JS flags by removing quotes
* @param {string} flag - JS flags parameter to sanitize
* @returns {string} Sanitized flag without quotes
*/
function sanitizeJSFlags(flag);
/**
* Generate headless browser options
* @param {string} url - Target URL
* @param {object} args - Launcher arguments
* @param {function} parent - Parent options function
* @returns {string[]} Array of command line options
*/
function headlessGetOptions(url, args, parent);
/**
* Generate Chrome Canary browser options
* @param {string} url - Target URL
* @param {object} args - Launcher arguments
* @param {function} parent - Parent options function
* @returns {string[]} Array of command line options
*/
function canaryGetOptions(url, args, parent);The package automatically detects browser installations using platform-specific logic:
/**
* Get Chrome executable path on Windows
* @param {string} chromeDirName - Chrome directory name ('Chrome' or 'Chrome SxS')
* @returns {string|null} Path to chrome.exe or null if not found
*/
function getChromeExe(chromeDirName);
/**
* Get Chromium executable path on Windows
* @returns {string|null} Path to chromium chrome.exe or null if not found
*/
function getChromiumExe();
/**
* Find binary using which command on Linux
* @param {string[]} commands - Array of command names to search for
* @returns {string|null} First found command or null
*/
function getBin(commands);
/**
* Get Chrome path on macOS with user directory fallback
* @param {string} defaultPath - Default application path
* @returns {string} Resolved Chrome path
*/
function getChromeDarwin(defaultPath);LOCALAPPDATA, PROGRAMFILES, PROGRAMFILES(X86), ProgramW6432<ENV_VAR>\Google\<ChromeDirName>\Application\chrome.exe
ChromeChrome SxS<ENV_VAR>\Chromium\Application\chrome.exewhich command to find executables in PATHgoogle-chrome, google-chrome-stablegoogle-chrome-canary, google-chrome-unstablechromium-browser, chromium (prioritizes chromium-browser to avoid conflict with legacy chromium-bsu package)/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
$HOME/Applications/Google Chrome.app/Contents/MacOS/Google Chrome/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary
$HOME/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary/Applications/Chromium.app/Contents/MacOS/Chromium