From efc53962f97a81992b8bb28c09b27482f5b2e1e5 Mon Sep 17 00:00:00 2001 From: Dave Parslow Date: Mon, 15 Oct 2018 09:50:52 -0700 Subject: [PATCH] Fix return values for webdriver config hooks (#29594) * Export the configuration interface Added class for the server instead of interface Added TS lint file and fixed errors * Fix promise values for hooks * Minor change --- types/webdriverio/index.d.ts | 60 +++++++++++++------------- types/webdriverio/webdriverio-tests.ts | 19 ++++++++ 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/types/webdriverio/index.d.ts b/types/webdriverio/index.d.ts index 945de64846..27be7e973f 100644 --- a/types/webdriverio/index.d.ts +++ b/types/webdriverio/index.d.ts @@ -4,6 +4,7 @@ // Tim Brust // Fredrik Smedberg // Tanvir ul Islam +// Dave Parslow // Phil Leger // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -343,65 +344,66 @@ declare namespace WebdriverIO { } interface Hooks { - onError?(error: Error): Promise & undefined; + onError?(error: Error): Promise | void; - onPrepare?( + onPrepare?( config: Options, capabilities: DesiredCapabilities - ): Promise & undefined; + ): Promise | void; - onComplete?(exitCode: number): Promise & undefined; + onComplete?(exitCode: number): Promise | void; - before?( + before?( capabilities: DesiredCapabilities, specs: string[] - ): Promise & undefined; + ): Promise | undefined; - beforeCommand?( + beforeCommand?( commandName: string, args: any[] - ): Promise & undefined; + ): Promise | void; - beforeFeature?(feature: string): Promise & undefined; - beforeHook?(): Promise & undefined; - beforeScenario?(scenario: string): Promise & undefined; + beforeHook?(): Promise | void; - beforeSession?( + beforeSession?( config: Options, capabilities: DesiredCapabilities, specs: string[] - ): Promise & undefined; + ): Promise | void; - beforeStep?(step: string): Promise & undefined; - beforeSuite?(suite: Suite): Promise & undefined; - beforeTest?(test: Test): Promise & undefined; - afterHook?(): Promise & undefined; + beforeSuite?(suite: Suite): Promise | void; + beforeTest?(test: Test): Promise | void; + afterHook?(): Promise | void; - after?( + after?( result: number, capabilities: DesiredCapabilities, specs: string[] - ): Promise & undefined; + ): Promise | void; - afterCommand?( + afterCommand?( commandName: string, args: any[], result: any, error?: Error - ): Promise & undefined; + ): Promise | undefined; - afterScenario?(scenario: any): Promise & undefined; - - afterSession?( + afterSession?( config: Options, capabilities: DesiredCapabilities, specs: string[] - ): Promise & undefined; + ): Promise | void; - afterStep?(stepResult: any): Promise & undefined; - afterSuite?(suite: Suite): Promise & undefined; - afterTest?(test: Test): Promise & undefined; - afterFeature?(feature: string): Promise & undefined; + afterSuite?(suite: Suite): Promise | void; + afterTest?(test: Test): Promise | void; + + // cucumber specific hooks + beforeFeature?(feature: string): Promise | void; + beforeScenario?(scenario: string): Promise | void; + beforeStep?(step: string): Promise | void; + afterFeature?(feature: string): Promise | void; + afterScenario?(scenario: any): Promise | void; + afterStep?(stepResult: any): Promise | void; } interface Options { diff --git a/types/webdriverio/webdriverio-tests.ts b/types/webdriverio/webdriverio-tests.ts index 56dc3ddfda..11b473066b 100644 --- a/types/webdriverio/webdriverio-tests.ts +++ b/types/webdriverio/webdriverio-tests.ts @@ -118,3 +118,22 @@ webdriverio console.log(visible); // Should return true }) .end(); + +let hooks: webdriverio.Hooks = {}; + +hooks = { + // Hooks can be a noop function + onPrepare: () => undefined, + onError() { + // Hooks don't have to return a value + } +}; + +hooks.onComplete = async () => { + // Hooks can return a promise but the promise can be void +}; + +hooks.afterTest = async () => { + // Hooks can have a promise with a result but it is not typically used + return false; +};