const testState = () => ({ type: 'test', start: '2018-05-14T15:17:18.914Z', _duration: 0, uid: 'should can do something3', cid: '0-0', title: 'should can do something', fullTitle: 'My awesome feature should can do something', state: 'pending', featureName: 'feature foo bar', scenarioName: 'story foo bar' } as any) export function testStart(): WDIOReporter.Test { return testState() } export function testPassed() { return Object.assign(testState(), { state: 'passed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function testFailed() { const error = { message: 'AssertionError [ERR_ASSERTION]: foo == bar', stack: 'AssertionError [ERR_ASSERTION]: foo == bar', type: 'AssertionError [ERR_ASSERTION]', name: 'Error', expected: 'foo', actual: 'bar' } return Object.assign(testState(), { error, state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function testFailedWithMultipleErrors() { const errors = [ { message: 'ReferenceError: All is Dust', stack: 'ReferenceError: All is Dust' }, { message: 'InternalError: Abandon Hope', stack: 'InternalError: Abandon Hope' } ] return Object.assign(testState(), { errors, state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function testFailedWithMultipleErrorsAndStacksNotContainingMessages() { const errors = [ { message: 'ReferenceError: All is Dust', stack: 'stack trace of ReferenceError' }, { message: 'InternalError: Abandon Hope', stack: 'stack trace of InternalError' } ] return Object.assign(testState(), { errors, state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function testFailedWithAssertionErrorFromExpectWebdriverIO() { const errors = [ { message: 'Expect $(`login-app`).$(``).$(``).$(``) to be displayed\n' + 'Expected: \u001b[32m"displayed"\u001b[39m\n' + 'Received: \u001b[31m"\u001b[7mnot \u001b[27mdisplayed"\u001b[39m', stack: 'Error: Expect $(`content-production-app`).$(``).$(``).$(``) to be displayed\n' + '\n' + 'Expected: \u001b[32m"displayed"\u001b[39m\n' + 'Received: \u001b[31m"\u001b[7mnot \u001b[27mdisplayed"\u001b[39m\n' + ' at World. (then.js:271:21)\n' + ' at World.executeSync (node_modules/@wdio/sync/build/index.js:56:18)\n' + ' at node_modules/@wdio/sync/build/index.js:82:70', name: 'Error', } ] const error = { message: 'Expect $(`login-app`).$(``).$(``).$(``) to be displayed\n' + 'Expected: \u001b[32m"displayed"\u001b[39m\n' + 'Received: \u001b[31m"\u001b[7mnot \u001b[27mdisplayed"\u001b[39m', stack: 'Error: Expect $(`content-production-app`).$(``).$(``).$(``) to be displayed\n' + '\n' + 'Expected: \u001b[32m"displayed"\u001b[39m\n' + 'Received: \u001b[31m"\u001b[7mnot \u001b[27mdisplayed"\u001b[39m\n' + ' at World. (then.js:271:21)\n' + ' at World.executeSync (node_modules/@wdio/sync/build/index.js:56:18)\n' + ' at node_modules/@wdio/sync/build/index.js:82:70', name: 'Error', } return Object.assign(testState(), { errors, error, state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function testPending() { return Object.assign(testState(), { state: 'pending', end: '2018-05-14T15:17:21.631Z', _duration: 0 }) } const allHookState = () => ({ type: 'hook', start: '2018-05-14T15:17:18.914Z', _duration: 0, uid: 'hook-00-0', cid: '0-0', title: '"before all" hook for "should login with valid credentials"', parent: 'Login', } as any) const eachHookState = () => ({ type: 'hook', start: '2018-05-14T15:17:18.914Z', _duration: 0, uid: 'hook-00-0', cid: '0-0', title: '"before each" hook', currentTest: 'My Login application', parent: 'Login', } as any) export function hookStart(): WDIOReporter.Hook { return allHookState() } export function eachHookStart(): WDIOReporter.Hook { return eachHookState() } export function hookPassed(): WDIOReporter.Hook { return Object.assign(allHookState(), { state: 'passed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function hookFailed(): WDIOReporter.Hook { const error = { message: 'element ("body") still existing after 100ms', stack: 'Error: element ("body") still existing after 100ms', type: 'Error', } return Object.assign(allHookState(), { error, errors: [error], state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) } export function eachHookFailed(): WDIOReporter.Hook { const error = { message: 'element ("body") still existing after 100ms', stack: 'Error: element ("body") still existing after 100ms', type: 'Error', } return Object.assign(eachHookState(), { error, errors: [error], state: 'failed', end: '2018-05-14T15:17:21.631Z', _duration: 2730 }) }