UNPKG

1.99 kBJavaScriptView Raw
1const { Server } = require('karma')
2
3module.exports = (api, testFiles, options) => {
4 const webpackConfig = api.createWebpackChain()
5
6 const config = {
7 basePath: api.cwd,
8
9 browsers: [options.headless ? 'PoiChromeHeadless' : 'PoiChrome'],
10
11 customLaunchers: {
12 PoiChrome: {
13 base: 'Chrome'
14 },
15 PoiChromeHeadless: {
16 base: 'ChromeHeadless',
17 flags: ['--no-sandbox']
18 }
19 },
20
21 files: testFiles.map(pattern => ({
22 pattern,
23 watched: false
24 })),
25
26 exclude: ['!**/node_modules/**', '!**/dist/**', '!**/vendor/**'],
27
28 preprocessors: testFiles.reduce((res, pattern) => {
29 res[pattern] = ['webpack']
30 return res
31 }, {}),
32
33 frameworks: ['jasmine'],
34
35 reporters: ['mocha', options.coverage && 'coverage'].filter(Boolean),
36
37 // Only used when --coverage
38 coverageReporter: {
39 dir: 'coverage',
40 reporters: [
41 { type: 'text' },
42 { type: 'html', subdir: 'report-html' },
43 { type: 'lcov', subdir: 'report-lcov' }
44 ]
45 },
46
47 webpack: webpackConfig.entryPoints
48 .clear()
49 .end()
50 .toConfig(),
51
52 webpackMiddleware: {
53 logLevel: 'error',
54 stats: 'errors-only',
55 noInfo: true
56 },
57
58 colors: true,
59
60 client: {
61 captureConsole: true,
62
63 jasmine: {
64 random: false
65 }
66 },
67
68 singleRun: !options.watch
69 }
70
71 const server = createServer(config, api.PoiError)
72
73 server.start()
74
75 return server.completion
76}
77
78function createServer(config, PoiError) {
79 let resolve
80 let reject
81
82 // eslint-disable-next-line promise/param-names
83 const promise = new Promise((res, rej) => {
84 resolve = res
85 reject = rej
86 })
87
88 const callback = code => {
89 if (code === 0) return resolve()
90 const err = new PoiError({
91 message: `Karma has exited with code ${code}`
92 })
93 err.code = code
94 reject(err)
95 }
96
97 const server = new Server(config, callback)
98
99 server.completion = promise
100 return server
101}