All files / wdio-sync/src utils.js

100% Statements 16/16
100% Branches 6/6
100% Functions 4/4
100% Lines 15/15

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                    4x 2x   2x 2x     4x 4x 4x     4x 2x     4x     4x     4x 49x     4x               8x    
import { STACKTRACE_FILTER_FN } from './constants'
 
/**
 * Cleanup stack traces, merge and remove duplicates
 * @param {Error|*} commandError    Error object or anything else including undefined
 * @param {Error}   savedError      Error with root stack trace
 * @returns {Error}
 */
export function sanitizeErrorMessage (commandError, savedError) {
    let name, stack, message
    if (commandError instanceof Error) {
        ({ name, message, stack } = commandError)
    } else {
        ({ name } = savedError)
        message = commandError
    }
 
    const err = new Error(message)
    err.name = name
    err.stack = savedError.stack
 
    // merge stack traces if Error has stack trace
    if (stack) {
        err.stack = stack + '\n' + err.stack
    }
 
    let stackArr = err.stack.split('\n')
 
    // filter stack trace
    stackArr = stackArr.filter(STACKTRACE_FILTER_FN)
 
    // remove duplicates from stack traces
    err.stack = stackArr.reduce((acc, currentValue) => {
        return acc.includes(currentValue) ? acc : `${acc}\n${currentValue}`
    }, '').trim()
 
    return err
}
 
/**
 * filter out arguments passed to specFn & hookFn, don't allow callbacks
 * as there is no need for user to call e.g. `done()`
 */
export function filterSpecArgs (args) {
    return args.filter((arg) => typeof arg !== 'function')
}