@isomorphic-git/lightning-fs
Version:
A lean and fast 'fs' for the browser
202 lines (194 loc) • 6.2 kB
JavaScript
// Karma configuration
process.env.CHROME_BIN = require('puppeteer').executablePath()
const path = require('path')
const webpack = require('webpack')
const REPO = process.env.BUILD_REPOSITORY_NAME
const ISSUE =
process.env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER ||
process.env.SYSTEM_PULLREQUEST_PULLREQUESTID
const COMMIT = process.env.BUILD_SOURCEVERSION
module.exports = function (config) {
const options = {
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: [],
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'src/**/*.spec.js',
{
pattern: 'src/__tests__/__fixtures__/test-folder/**/*',
served: true,
watched: false,
included: false
},
{
pattern: 'src/__tests__/__fixtures__/test-folder/**/.*',
served: true,
watched: false,
included: false
},
{
pattern: 'src/**/*.worker.js',
served: true,
watched: true,
included: false
},
{
pattern: 'dist/**',
served: true,
watched: true,
included: false
},
],
// list of files to exclude
// exclude: [
// '**/node_modules/**',
// ],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'src/**/*.spec.js': ['webpack']
},
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// Increase timeouts since some actions take quite a while.
browserNoActivityTimeout: 4 * 60 * 1000, // default 10000
// https://support.saucelabs.com/hc/en-us/articles/225104707-Karma-Tests-Disconnect-Particularly-When-Running-Tests-on-Safari
browserDisconnectTimeout: 10000, // default 2000
browserDisconnectTolerance: 0, // default 0
captureTimeout: 4 * 60 * 1000, // default 60000
// SauceLabs browsers
customLaunchers: {
XXXsl_chrome: {
base: 'SauceLabs',
browserName: 'chrome',
extendedDebugging: true,
},
XXXsl_firefox: {
base: 'SauceLabs',
browserName: 'firefox',
},
sl_edge: {
base: 'SauceLabs',
browserName: 'MicrosoftEdge',
version: '79.0',
},
sl_safari: {
base: 'SauceLabs',
browserName: 'safari',
platform: 'macOS 11.00',
version: '14',
},
sl_ios_safari: {
base: 'SauceLabs',
deviceName: 'iPhone 11 Pro Max Simulator',
platformName: 'iOS',
platformVersion: '14.0',
browserName: 'Safari',
appiumVersion: '1.18.3',
},
XXXsl_android_chrome: {
base: 'SauceLabs',
deviceOrientation: 'portrait',
deviceName: 'Android GoogleAPI Emulator',
platformName: 'Android',
platformVersion: '7.1',
browserName: 'Chrome',
appiumVersion: '1.15.0',
},
bs_android_chrome: {
base: 'BrowserStack',
os: 'android',
os_version: '10.0',
browser: 'android',
device: 'Google Pixel 4',
real_mobile: true,
},
FirefoxHeadless: {
base: 'Firefox',
flags: ['-headless'],
},
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: ['--no-sandbox'],
},
ChromeCanaryHeadlessNoSandbox: {
base: 'ChromeCanaryHeadless',
flags: ['--no-sandbox'],
},
},
sauceLabs: {
// Since tags aren't being sent correctly, I'm going to stick the branch name in here.
testName: `${REPO} / ${ISSUE} / ${COMMIT}`,
// Note: I added the Date.now() bit so that when I can click "Restart" on a Travis job,
// Sauce Labs does not simply append new test results to the old set that failed, which
// convinces karma that it failed again and always.
build: process.env.BUILD_BUILDID + '-' + Date.now(),
// Note: it does not appear that tags are being sent correctly.
tags: [ISSUE],
recordScreenshots: false,
recordVideo: false,
public: 'public restricted',
},
concurrency: 5,
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// test results reporter to use
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['verbose', 'junit'],
junitReporter: {
outputDir: './junit'
},
webpack: {
mode: 'development',
devtool: 'inline-source-map',
},
plugins: [
'karma-browserstack-launcher',
'karma-chrome-launcher',
'karma-edge-launcher',
'karma-ie-launcher',
'karma-safari-launcher',
'karma-firefox-launcher',
'karma-jasmine',
'karma-junit-reporter',
'karma-sauce-launcher',
'karma-verbose-reporter',
'karma-webpack',
]
}
if (!process.env.SAUCE_USERNAME) {
console.log(
'Skipping SauceLabs tests because SAUCE_USERNAME environment variable is not set.'
)
} else if (!process.env.SAUCE_ACCESS_KEY) {
console.log(
'Skipping SauceLabs tests because SAUCE_ACCESS_KEY environment variable is not set.'
)
} else {
options.reporters.push('saucelabs')
}
if (process.env.TEST_BROWSERS) {
options.browsers = process.env.TEST_BROWSERS.split(',')
} else {
options.browsers.push('ChromeHeadlessNoSandbox')
options.browsers.push('FirefoxHeadless')
}
console.log('running with browsers:', options.browsers)
if (!process.env.CI) {
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
options.singleRun = false
// enable / disable watching file and executing tests whenever any file changes
options.autoWatch = true
}
config.set(options)
}