Cucumber-js: ne peut plus ignorer un scénario dans la v7

Créé le 1 janv. 2021  ·  3Commentaires  ·  Source: cucumber/cucumber-js

En V6, pour sauter un scénario, j'ai utilisé un crochet Avant chaque scénario

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

Ce même code ne se compile plus en v7 avec dactylographié :

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>'.

Quelle est la bonne façon de sauter un scénario dans la v7 ?

Merci

bug since-7

Commentaire le plus utile

Je viens de rencontrer exactement le même problème lors de l'ajout de la prise en charge de Cucumber v7 à Serenity/JS .

Il me semble que c'est un problème avec les définitions de type plutôt que la fonctionnalité réelle, qui fonctionne exactement de la même manière que dans la v6.

@charlierudolph / @davidjgoss , voudriez-vous vérifier si ma réflexion ci-dessous est correcte ?

Dans support_code_library_builder/types.ts il y a les définitions suivantes :

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

Puisque le concombre permet au crochet de retourner void , un string de 'skipped' ou 'pending' , ou un Promise avec l'un de ces résultats , une implémentation améliorée pourrait ressembler plus ou moins à ceci :

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

Jusqu'à ce que cette modification ou une modification similaire soit introduite, une solution de contournement pour ce problème consisterait à spécifier le hook de test comme suit :

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

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

Tous les 3 commentaires

Je viens de rencontrer exactement le même problème lors de l'ajout de la prise en charge de Cucumber v7 à Serenity/JS .

Il me semble que c'est un problème avec les définitions de type plutôt que la fonctionnalité réelle, qui fonctionne exactement de la même manière que dans la v6.

@charlierudolph / @davidjgoss , voudriez-vous vérifier si ma réflexion ci-dessous est correcte ?

Dans support_code_library_builder/types.ts il y a les définitions suivantes :

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

Puisque le concombre permet au crochet de retourner void , un string de 'skipped' ou 'pending' , ou un Promise avec l'un de ces résultats , une implémentation améliorée pourrait ressembler plus ou moins à ceci :

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

Jusqu'à ce que cette modification ou une modification similaire soit introduite, une solution de contournement pour ce problème consisterait à spécifier le hook de test comme suit :

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

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

Salut @jan-molak , merci beaucoup pour votre retour, votre solution de contournement fonctionne parfaitement !

Merci pour la solution de contournement @jan-molak - je vais jeter un œil à celui-ci sous peu.

Cette page vous a été utile?
0 / 5 - 0 notes