- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Decorator в TS не удаётся вызвать. Фреймворк playwright
- Есть функция декоратор:
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;
};
}
Который я хочу использовать для метода класса
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)); } }
На данном этапе у меня возникает ошибка
Сам метод используется уже в дальнейшем в тесте
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;
};
}