All files / wdio-static-server-service/src launcher.js

100% Statements 21/21
100% Branches 8/8
100% Functions 5/5
100% Lines 20/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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            1x   1x                 5x 1x     4x 4x 4x   4x 1x 1x 1x 1x     4x 5x 5x     4x 1x   4x             2x 2x        
import express from 'express'
import fs from 'fs-extra'
import morgan from 'morgan'
import path from 'path'
import logger from '@wdio/logger'
 
const log = logger('@wdio/static-server-service')
 
const DEFAULT_LOG_NAME = 'wdio-static-server-service.log'
 
export default class StaticServerLauncher {
    onPrepare({
        outputDir,
        staticServerFolders: folders,
        staticServerPort: port = 4567,
        staticServerMiddleware: middleware = []
    }) {
        if (!folders) {
            return
        }
 
        this.server = express()
        this.folders = folders
        this.port = port
 
        if (outputDir) {
            const file = path.join(outputDir, DEFAULT_LOG_NAME)
            fs.createFileSync(file)
            const stream = fs.createWriteStream(file)
            this.server.use(morgan('tiny', { stream }))
        }
 
        (Array.isArray(folders) ? folders : [folders]).forEach((folder) => {
            log.info('Mounting folder `%s` at `%s`', path.resolve(folder.path), folder.mount)
            this.server.use(folder.mount, express.static(folder.path))
        })
 
        middleware.forEach(
            (ware) => this.server.use(ware.mount, ware.middleware))
 
        return new Promise((resolve, reject) => this.server.listen(this.port, (err) => {
            /* istanbul ignore next */
            if (err) {
                log.error(`Couldn't start static server: ${err.message}`)
                return reject(err)
            }
 
            log.info(`Static server running at http://localhost:${port}`)
            resolve()
        }))
    }
}