Repository navigation
Expand file tree
/
Copy pathkarma.conf.js
More file actions
158 lines (132 loc) · 4.63 KB
/
Copy pathkarma.conf.js
File metadata and controls
158 lines (132 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Karma configuration
// Generated on Thu Sep 19 2019 02:05:06 GMT-0400 (Eastern Daylight Time)
const { BrowserFinder } = require('@agent-infra/browser-finder')
const finder = new BrowserFinder()
// Detect which browsers are installed locally. Honor an explicit *_BIN
// override if one is already set, otherwise ask the finder to locate it.
function locateBrowser (type, envVar) {
if (process.env[envVar]) {
return process.env[envVar]
}
try {
return finder.findBrowser(type).path
} catch (e) {
return undefined
}
}
const browsers = []
const chromeBin = locateBrowser('chrome', 'CHROME_BIN')
if (chromeBin) {
process.env.CHROME_BIN = chromeBin
browsers.push('ChromeHeadlessWebGL')
}
const firefoxBin = locateBrowser('firefox', 'FIREFOX_BIN')
if (firefoxBin) {
process.env.FIREFOX_BIN = firefoxBin
browsers.push('FirefoxHeadless')
}
if (browsers.length === 0) {
throw new Error('No supported browsers (Chrome or Firefox) found locally. Install one or set CHROME_BIN / FIREFOX_BIN.')
}
// Make sure TEST_SUITE is set
if (!process.env.TEST_SUITE) {
console.error('TEST_SUITE environment variable must be set')
process.exit(1)
}
module.exports = function (config) {
config.set({
// 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', 'karma-typescript'],
// list of files / patterns to load in the browser
files: [
'src/**/*.ts',
`spec/${process.env.TEST_SUITE}/**/*.ts`,
{ pattern: 'spec/assets/**/*', included: false }
],
// list of files / patterns to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'**/*.ts': ['karma-typescript']
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['dots', 'karma-typescript'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
// Only the browsers detected as installed locally.
browsers,
customLaunchers: {
'FirefoxHeadless': {
base: 'Firefox',
flags: ['-headless'],
prefs: {
'network.proxy.type': 0,
'media.autoplay.default': 0, // Allow all autoplay
// Mute the speaker output only. The Web Audio graph still runs, so
// analyser-based assertions stay valid. Applies to karma's throwaway
// temp profile, so it won't affect a normal Firefox install.
'media.volume_scale': '0.0',
// Force WebGL on under software rendering (e.g. llvmpipe in CI),
// which Firefox would otherwise blocklist for lacking a GPU.
'webgl.force-enabled': true,
'webgl.disabled': false,
'webgl.disable-fail-if-major-performance-caveat': true
}
},
'ChromeHeadlessWebGL': {
base: 'ChromeHeadless',
flags: [
'--use-gl=angle',
'--use-angle=swiftshader',
'--no-sandbox',
'--autoplay-policy=no-user-gesture-required',
// Mute the speaker output only; the Web Audio graph still runs.
'--mute-audio'
]
}
},
client: {
captureConsole: true,
jasmine: {
timeoutInterval: 15000
}
},
browserConsoleLogOptions: {
level: 'log'
},
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity,
karmaTypescriptConfig: {
compilerOptions: {
// Avoid type-checking third-party declaration packages in browser tests.
skipLibCheck: true
},
bundlerOptions: {
// Resemblejs only references the `canvas` dependency in the node
// runtime. Since the tests are run in a browser, we need to exclude it
// from the bundle to prevent false errors.
exclude: ['canvas']
}
}
})
}