1 | const { Server } = require('karma')
|
2 |
|
3 | module.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 |
|
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 |
|
78 | function createServer(config, PoiError) {
|
79 | let resolve
|
80 | let reject
|
81 |
|
82 |
|
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 | }
|