Skip to content

Commit

Permalink
wdio-utils: Filter out internal stacktraces (#8130)
Browse files Browse the repository at this point in the history
* wdio-utils: Filter out internal stacktraces

* wdio-utils: Only filter out webdriverio specific interanl stacktraces
  • Loading branch information
WillBrock committed Mar 23, 2022
1 parent d0c3b25 commit 8ca62d6
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 1 deletion.
23 changes: 23 additions & 0 deletions packages/wdio-utils/src/test-framework/testFnWrapper.ts
Expand Up @@ -10,6 +10,13 @@ import type {
JasmineContext
} from './types'

const STACKTRACE_FILTER = [
'node_modules/webdriver/',
'node_modules/webdriverio/',
'node_modules/@wdio/',
'(internal/process/task',
]

/**
* wraps test framework spec/hook function with WebdriverIO before/after hooks
*
Expand Down Expand Up @@ -77,6 +84,10 @@ export const testFrameworkFnWrapper = async function (
try {
result = await promise
} catch (err: any) {
if (err.stack) {
err.stack = filterStackTrace(err.stack)
}

error = err
}
const duration = Date.now() - testStart
Expand Down Expand Up @@ -106,3 +117,15 @@ export const testFrameworkFnWrapper = async function (
}
return result
}

/**
* Filter out internal stacktraces. exporting to allow testing of the function
* @param {string} stack Stacktrace
* @returns {string}
*/
export const filterStackTrace = (stack: string): string => {
return stack
.split('\n')
.filter(line => !STACKTRACE_FILTER.some(l => line.includes(l)))
.join('\n')
}
@@ -1,5 +1,5 @@
import * as shim from '../../src/shim'
import { testFnWrapper } from '../../src/test-framework/testFnWrapper'
import { testFnWrapper, filterStackTrace } from '../../src/test-framework/testFnWrapper'

jest.mock('../../src/shim', () => ({
executeHooksWithArgs: jest.fn(),
Expand Down Expand Up @@ -91,3 +91,39 @@ describe('testFnWrapper', () => {
executeHooksWithArgs.mockClear()
})
})

describe('filterStackTrace', () => {
it('should remove internal webdriverio lines only', () => {
const stackTraces = [
{
fullStack : `
at Context.<anonymous> (/foo/bar/baz/example.e2e.js:27:9)
at Context.executeAsync (/foo/bar/baz/node_modules/@wdio/utils/build/shim.js:331:27)
at Context.testFrameworkFnWrapper (/foo/bar/baz/node_modules/@wdio/utils/build/test-framework/testFnWrapper.js:50:32)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
`,
filteredStack : `
at Context.<anonymous> (/foo/bar/baz/example.e2e.js:27:9)
`
},
{
fullStack : `
at implicitWait (/foo/bar/node_modules/webdriverio/build/utils/implicitWait.js:34:19)
at async Element.elementErrorHandlerCallbackFn (/foo/bar/node_modules/webdriverio/build/middlewares.js:20:29)
at async Element.wrapCommandFn (/foo/bar/node_modules/@wdio/utils/build/shim.js:137:29)
at async Element.wrapCommandFn (/foo/bar/node_modules/some/fake/lib/bar.js:137:29)
at async Context.<anonymous> (/foo/bar/test/specs/example.e2e.ts:8:9)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
`,
filteredStack : `
at async Element.wrapCommandFn (/foo/bar/node_modules/some/fake/lib/bar.js:137:29)
at async Context.<anonymous> (/foo/bar/test/specs/example.e2e.ts:8:9)
`
}
]

for (const { fullStack, filteredStack } of stackTraces) {
expect(filteredStack).toBe(filterStackTrace(fullStack))
}
})
})

0 comments on commit 8ca62d6

Please sign in to comment.