Cucumber-js: tidak dapat melewati skenario lagi di v7

Dibuat pada 1 Jan 2021  ·  3Komentar  ·  Sumber: cucumber/cucumber-js

Di V6, untuk melewati skenario, saya menggunakan kait Sebelum setiap skenario

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

Kode yang sama ini tidak dikompilasi lagi di v7 dengan TypeScript:

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

Apa cara yang tepat untuk melewati skenario di v7?

Terima kasih

bug since-7

Komentar yang paling membantu

Saya baru saja menemukan masalah yang sama persis saat menambahkan dukungan untuk Cucumber v7 ke Serenity/JS .

Bagi saya ini adalah masalah dengan definisi tipe daripada fungsi sebenarnya, yang bekerja dengan cara yang sama persis seperti di v6.

@charlierudolph / @davidjgoss , maukah Anda memeriksa apakah pemikiran saya di bawah ini benar?

Dalam support_code_library_builder/types.ts ada definisi berikut:

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

Karena Mentimun memungkinkan kait untuk mengembalikan void , string dari 'skipped' atau 'pending' , atau Promise dengan salah satu hasil tersebut , implementasi yang ditingkatkan dapat terlihat kurang lebih seperti ini:

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

Sampai perubahan ini atau perubahan serupa diperkenalkan, solusi untuk masalah ini akan menentukan kait uji sebagai berikut:

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

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

Semua 3 komentar

Saya baru saja menemukan masalah yang sama persis saat menambahkan dukungan untuk Cucumber v7 ke Serenity/JS .

Bagi saya ini adalah masalah dengan definisi tipe daripada fungsi sebenarnya, yang bekerja dengan cara yang sama persis seperti di v6.

@charlierudolph / @davidjgoss , maukah Anda memeriksa apakah pemikiran saya di bawah ini benar?

Dalam support_code_library_builder/types.ts ada definisi berikut:

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

Karena Mentimun memungkinkan kait untuk mengembalikan void , string dari 'skipped' atau 'pending' , atau Promise dengan salah satu hasil tersebut , implementasi yang ditingkatkan dapat terlihat kurang lebih seperti ini:

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

Sampai perubahan ini atau perubahan serupa diperkenalkan, solusi untuk masalah ini akan menentukan kait uji sebagai berikut:

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

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

Hai @jan-molak , terima kasih banyak atas tanggapan Anda, solusi Anda bekerja dengan sempurna!

Terima kasih atas solusinya @ jan-molak - Saya akan segera membahasnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat