Cucumber-js: kann ein Szenario in v7 nicht mehr überspringen

Erstellt am 1. Jan. 2021  ·  3Kommentare  ·  Quelle: cucumber/cucumber-js

Um ein Szenario zu überspringen, habe ich in V6 einen Hook vor jedem Szenario verwendet

Before({ tags: '<strong i="6">@ignore</strong>' }, async function () {
  return 'skipped';
});

Derselbe Code wird in v7 nicht mehr mit Typoskript kompiliert:

error TS2769: No overload matches this call.
  Overload 1 of 3, '(tags: string, code: TestCaseHookFunction): void', gave the following error.
    Argument of type '{ tags: string; }' is not assignable to parameter of type 'string'.
  Overload 2 of 3, '(options: IDefineTestCaseHookOptions, code: TestCaseHookFunction): void', gave the following error.
    Argument of type '(this: CustomWorld) => Promise<string>' is not assignable to parameter of type 'TestCaseHookFunction'.
      Type '(this: CustomWorld) => Promise<string>' is not assignable to type 'TestCaseHookFunctionWithoutParameter'.
        Type 'Promise<string>' is not assignable to type 'void | Promise<void>'.
          Type 'Promise<string>' is not assignable to type 'Promise<void>'.

Was ist der richtige Weg, um ein Szenario in v7 zu überspringen?

Vielen Dank

bug since-7

Hilfreichster Kommentar

Ich bin gerade auf genau das gleiche Problem gestoßen, als ich Serenity/JS Unterstützung für Cucumber v7 hinzugefügt habe.

Mir scheint, dass es eher ein Problem mit Typdefinitionen als mit der eigentlichen Funktionalität ist, die genau so funktioniert wie in v6.

@charlierudolph / @davidjgoss , würde es Ihnen etwas ausmachen zu überprüfen, ob meine unten stehenden Überlegungen richtig sind?

In support_code_library_builder/types.ts gibt es folgende Definitionen:

export type TestCaseHookFunctionWithoutParameter = () => void | Promise<void>
export type TestCaseHookFunctionWithParameter = (
  arg: ITestCaseHookParameter
) => void | Promise<void>

Da Gurke es zulässt, dass der Hook void , ein string von 'skipped' oder 'pending' oder ein Promise mit einem dieser Ergebnisse zurückgibt , könnte eine verbesserte Implementierung ungefähr so ​​aussehen:

export type TestCaseHookFunctionResult = 'skipped' | 'pending' | void
export type TestCaseHookFunctionWithoutParameter = () => TestCaseHookFunctionResult | Promise<TestCaseHookFunctionResult>
export type TestCaseHookFunctionWithParameter = (
  arg: ITestCaseHookParameter
) => TestCaseHookFunctionResult | Promise<TestCaseHookFunctionResult>

Bis diese oder eine ähnliche Änderung eingeführt wird, besteht eine Problemumgehung für dieses Problem darin, den Test-Hook wie folgt anzugeben:

import { Before } from '@cucumber/cucumber';

Before({ tags: '<strong i="25">@ignore</strong>' }, function () {
    return 'skipped' as any;
});

Alle 3 Kommentare

Ich bin gerade auf genau das gleiche Problem gestoßen, als ich Serenity/JS Unterstützung für Cucumber v7 hinzugefügt habe.

Mir scheint, dass es eher ein Problem mit Typdefinitionen als mit der eigentlichen Funktionalität ist, die genau so funktioniert wie in v6.

@charlierudolph / @davidjgoss , würde es Ihnen etwas ausmachen zu überprüfen, ob meine unten stehenden Überlegungen richtig sind?

In support_code_library_builder/types.ts gibt es folgende Definitionen:

export type TestCaseHookFunctionWithoutParameter = () => void | Promise<void>
export type TestCaseHookFunctionWithParameter = (
  arg: ITestCaseHookParameter
) => void | Promise<void>

Da Gurke es zulässt, dass der Hook void , ein string von 'skipped' oder 'pending' oder ein Promise mit einem dieser Ergebnisse zurückgibt , könnte eine verbesserte Implementierung ungefähr so ​​aussehen:

export type TestCaseHookFunctionResult = 'skipped' | 'pending' | void
export type TestCaseHookFunctionWithoutParameter = () => TestCaseHookFunctionResult | Promise<TestCaseHookFunctionResult>
export type TestCaseHookFunctionWithParameter = (
  arg: ITestCaseHookParameter
) => TestCaseHookFunctionResult | Promise<TestCaseHookFunctionResult>

Bis diese oder eine ähnliche Änderung eingeführt wird, besteht eine Problemumgehung für dieses Problem darin, den Test-Hook wie folgt anzugeben:

import { Before } from '@cucumber/cucumber';

Before({ tags: '<strong i="25">@ignore</strong>' }, function () {
    return 'skipped' as any;
});

Hallo @jan-molak, vielen Dank für dein Feedback, dein Workaround funktioniert einwandfrei!

Danke für den Workaround @jan-molak - ich schaue mir das gleich mal an.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen