Decorator в TS не удаётся вызвать. Фреймворк playwright

  1. Есть функция декоратор:
    export function stepDecorator(stepName?: string) {
      return function decorator<This, Args extends Array<unknown>, Return>(
        target: (this: This, ...args: Args) => Promise<Return>,
        context: ClassMethodDecoratorContext<
          This,
          (this: This, ...args: Args) => Promise<Return>
        >,
      ) {
        async function replacementMethod(
          this: This,
          ...args: Args
        ): Promise<Return> {
          const name =
            stepName ??
            // @ts-expect-error error
            `${this.constructor.name}.${context.name as string}(${args.map((a) => JSON.stringify(a)).join(',')})`;
              return test.step(name, async () => await target.call(this, ...args));
        }
            return replacementMethod;
      };
    }
  1. Который я хочу использовать для метода класса

    export class UnderScoringAPIClient implements APIClient {
       constructor(public context: APIRequestContext) {}
           /**
        * @description  запросить скоринг вручную
        */
           @stepDecorator('scoring')
           async scoring(requestId: number): Promise<APIResponse> {
         const url = `/scoring?requestId=${requestId}`;
         return await test.step(`post ${url}`, async () =>
           await this.context.post(url));
       }
     }
    

На данном этапе у меня возникает ошибка введите сюда описание изображения

  1. Сам метод используется уже в дальнейшем в тесте

    await test.step(`Запрашиваем скоринг в заявке`, async () => {
           const underScoringRquest = await underScoringAPIClient.scoring(
             requestIdCompanyMigFromAgent,
           );
           expect(underScoringRquest.status()).toBe(200);
           console.log(underScoringRquest);
         });
    

Подскажите, как правильно вызвать декоратор stepDecorator и что в него передать? Просто передать в него строку не помогает


Ответы (1 шт):

Автор решения: Андрей Морозов

Подкоректировал декоратор. Вот так уже ответ вернет

export function step(stepName?: string) {
  return function decorator<This, Args extends Array<unknown>, Return>(
    target: (this: This, ...args: Args) => Promise<Return>,
    context: ClassMethodDecoratorContext<
      This,
      (this: This, ...args: Args) => Promise<Return>
    >,
  ) {
    async function replacementMethod(
      this: This,
      ...args: Args
    ): Promise<Return> {
      const name =
        stepName ??
        // @ts-expect-error error
        `${this.constructor.name}.${context.name as string}(${args.map((a) => JSON.stringify(a)).join(',')})`;

      return test.step(name, async () => {
        const replacementMethodResponse = await target.call(this, ...args);
        return await replacementMethodResponse.json();
      });
    }

    return replacementMethod;
  };
}
→ Ссылка