bootstrap/js/tests/karma.conf.js

223 lines
6.1 KiB
JavaScript
Raw Permalink Normal View History

'use strict'
2022-09-20 13:09:14 +08:00
const path = require('node:path')
2018-09-13 15:42:15 +08:00
const ip = require('ip')
const { babel } = require('@rollup/plugin-babel')
2019-08-29 21:20:49 +08:00
const istanbul = require('rollup-plugin-istanbul')
const { nodeResolve } = require('@rollup/plugin-node-resolve')
2020-06-19 16:17:01 +08:00
const replace = require('@rollup/plugin-replace')
const { browsers } = require('./browsers.js')
const ENV = process.env
const DEBUG = Boolean(ENV.DEBUG)
const JQUERY_TEST = Boolean(ENV.JQUERY)
2023-04-12 23:53:25 +08:00
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
const LAMBDATEST = Boolean(ENV.LAMBDATEST)
2023-04-12 23:53:25 +08:00
const webDriverConfig = {
desktop: {
hostname: 'hub.lambdatest.com',
port: 80
},
mobile: {
hostname: 'mobile-hub.lambdatest.com',
port: 80
}
2023-03-23 19:07:04 +08:00
}
const frameworks = [
2019-03-13 22:23:50 +08:00
'jasmine'
]
2018-10-14 19:59:51 +08:00
const plugins = [
2019-03-13 22:23:50 +08:00
'karma-jasmine',
'karma-rollup-preprocessor'
2018-10-14 19:59:51 +08:00
]
2018-09-13 15:42:15 +08:00
const reporters = ['dots']
const detectBrowsers = {
usePhantomJS: false,
postDetection(availableBrowser) {
// On CI just use Chrome
if (ENV.CI === true) {
return ['ChromeHeadless']
}
if (availableBrowser.includes('Chrome')) {
return DEBUG ? ['Chrome'] : ['ChromeHeadless']
2018-09-13 15:42:15 +08:00
}
if (availableBrowser.includes('Chromium')) {
return DEBUG ? ['Chromium'] : ['ChromiumHeadless']
}
2018-09-13 15:42:15 +08:00
if (availableBrowser.includes('Firefox')) {
return DEBUG ? ['Firefox'] : ['FirefoxHeadless']
2018-09-13 15:42:15 +08:00
}
throw new Error('Please install Chrome, Chromium or Firefox')
2018-09-13 15:42:15 +08:00
}
}
2021-10-29 15:38:35 +08:00
const config = {
2018-09-13 15:42:15 +08:00
basePath: '../..',
port: 9876,
colors: true,
autoWatch: false,
singleRun: true,
2023-04-11 21:05:23 +08:00
captureTimeout: 180_000,
2023-03-23 19:07:04 +08:00
browserDisconnectTolerance: 3,
2023-04-11 21:05:23 +08:00
browserDisconnectTimeout: 180_000,
browserNoActivityTimeout: 400_000,
2024-03-07 23:45:54 +08:00
retryLimit: 2,
2023-03-29 19:55:01 +08:00
concurrency: 5,
2018-09-13 15:42:15 +08:00
client: {
2023-03-29 16:51:45 +08:00
clearContext: false,
jasmine: {
2024-03-07 23:45:54 +08:00
timeoutInterval: 120_000
2023-03-29 16:51:45 +08:00
}
},
files: [
'node_modules/hammer-simulator/index.js',
2020-11-10 02:33:20 +08:00
{
pattern: 'js/tests/unit/**/!(jquery).spec.js',
2023-04-12 23:38:58 +08:00
watched: !BROWSERSTACK && !LAMBDATEST
2020-11-10 02:33:20 +08:00
}
],
preprocessors: {
'js/tests/unit/**/*.spec.js': ['rollup']
},
rollupPreprocessor: {
plugins: [
2020-06-19 16:17:01 +08:00
replace({
'process.env.NODE_ENV': '"dev"',
preventAssignment: true
2020-06-19 16:17:01 +08:00
}),
istanbul({
2020-05-10 03:28:09 +08:00
exclude: [
'node_modules/**',
'js/tests/unit/**/*.spec.js',
'js/tests/helpers/**/*.js'
]
}),
babel({
// Only transpile our source code
exclude: 'node_modules/**',
// Inline the required helpers in each file
babelHelpers: 'inline'
}),
nodeResolve()
],
output: {
format: 'iife',
name: 'bootstrapTest',
sourcemap: 'inline',
generatedCode: 'es2015'
}
2018-09-13 15:42:15 +08:00
}
}
2023-03-23 19:07:04 +08:00
if (LAMBDATEST) {
2023-03-28 18:22:30 +08:00
config.hostname = 'localhost.lambdatest.com'
config.captureTimeout = 600_000
2023-04-11 21:05:23 +08:00
2023-04-12 23:38:58 +08:00
for (const key of Object.keys(browsers.lambdaTest)) {
browsers.lambdaTest[key].base = 'WebDriver'
browsers.lambdaTest[key].build = `bootstrap-${ENV.GITHUB_SHA ? `${ENV.GITHUB_SHA.slice(0, 7)}-` : ''}${new Date().toISOString()}`
browsers.lambdaTest[key].project = 'Bootstrap'
if (browsers.lambdaTest[key].isRealMobile) {
2023-04-12 23:53:25 +08:00
browsers.lambdaTest[key].config = webDriverConfig.mobile
2023-04-12 23:38:58 +08:00
browsers.lambdaTest[key].user = ENV.LT_USERNAME
browsers.lambdaTest[key].accessKey = ENV.LT_ACCESS_KEY
browsers.lambdaTest[key].tunnel = true
browsers.lambdaTest[key].console = true
browsers.lambdaTest[key].network = true
2023-04-12 23:53:25 +08:00
browsers.lambdaTest[key].tunnelName = ENV.LT_TUNNEL_NAME || 'jasmine'
2023-04-12 23:38:58 +08:00
browsers.lambdaTest[key].pseudoActivityInterval = 5000 // 5000 ms heartbeat
2023-03-28 18:22:30 +08:00
} else {
2023-04-12 23:53:25 +08:00
browsers.lambdaTest[key].config = webDriverConfig.desktop
2023-04-12 23:38:58 +08:00
browsers.lambdaTest[key]['LT:Options'].username = ENV.LT_USERNAME
browsers.lambdaTest[key]['LT:Options'].accessKey = ENV.LT_ACCESS_KEY
browsers.lambdaTest[key]['LT:Options'].tunnel = true
browsers.lambdaTest[key]['LT:Options'].console = true
browsers.lambdaTest[key]['LT:Options'].network = true
2023-04-12 23:53:25 +08:00
browsers.lambdaTest[key]['LT:Options'].tunnelName = ENV.LT_TUNNEL_NAME || 'jasmine'
2023-04-12 23:38:58 +08:00
browsers.lambdaTest[key]['LT:Options'].pseudoActivityInterval = 5000 // 5000 ms heartbeat
2023-03-28 18:22:30 +08:00
}
}
2023-03-29 19:55:01 +08:00
plugins.push('karma-webdriver-launcher', 'karma-jasmine-html-reporter')
2023-04-12 23:38:58 +08:00
config.customLaunchers = browsers.lambdaTest
config.browsers = Object.keys(browsers.lambdaTest)
2023-03-23 19:07:04 +08:00
reporters.push('kjhtml')
2023-04-12 23:38:58 +08:00
} else if (BROWSERSTACK) {
config.hostname = ip.address()
config.browserStack = {
username: ENV.BROWSER_STACK_USERNAME,
accessKey: ENV.BROWSER_STACK_ACCESS_KEY,
build: `bootstrap-${ENV.GITHUB_SHA ? `${ENV.GITHUB_SHA.slice(0, 7)}-` : ''}${new Date().toISOString()}`,
project: 'Bootstrap'
2023-04-12 23:38:58 +08:00
}
plugins.push('karma-browserstack-launcher', 'karma-jasmine-html-reporter')
config.customLaunchers = browsers.browserStack
config.browsers = Object.keys(browsers.browserStack)
reporters.push('BrowserStack', 'kjhtml')
} else if (JQUERY_TEST) {
frameworks.push('detectBrowsers')
plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers'
)
2021-10-29 15:38:35 +08:00
config.detectBrowsers = detectBrowsers
config.files = [
'node_modules/jquery/dist/jquery.slim.min.js',
2020-11-10 02:33:20 +08:00
{
pattern: 'js/tests/unit/jquery.spec.js',
watched: false
}
]
2018-09-13 15:42:15 +08:00
} else {
frameworks.push('detectBrowsers')
plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers',
'karma-coverage-istanbul-reporter'
)
reporters.push('coverage-istanbul')
2021-10-29 15:38:35 +08:00
config.detectBrowsers = detectBrowsers
config.coverageIstanbulReporter = {
dir: path.resolve(__dirname, '../coverage/'),
2018-09-13 15:42:15 +08:00
reports: ['lcov', 'text-summary'],
thresholds: {
emitWarning: false,
global: {
statements: 90,
branches: 89,
2019-03-13 22:23:50 +08:00
functions: 90,
2018-09-13 15:42:15 +08:00
lines: 90
}
}
2018-09-13 15:42:15 +08:00
}
if (DEBUG) {
2021-10-29 15:38:35 +08:00
config.hostname = ip.address()
2019-03-13 22:23:50 +08:00
plugins.push('karma-jasmine-html-reporter')
reporters.push('kjhtml')
2021-10-29 15:38:35 +08:00
config.singleRun = false
config.autoWatch = true
}
}
2018-09-13 15:42:15 +08:00
2021-10-29 15:38:35 +08:00
config.frameworks = frameworks
config.plugins = plugins
config.reporters = reporters
2023-03-28 18:22:30 +08:00
2019-02-26 19:20:34 +08:00
module.exports = karmaConfig => {
2021-10-29 15:38:35 +08:00
config.logLevel = karmaConfig.LOG_ERROR
karmaConfig.set(config)
}