Facade і бізнес-кроки
Facade дає простий інтерфейс до складної підсистеми. У тестах це шар "кроків", який поєднує кілька Page Objects і API-викликів в одну бізнес-дію: "оформити переказ", "пройти KYC".
export class TransferSteps {
constructor(
private readonly accounts: AccountsPage,
private readonly transfer: TransferPage,
) {}
async sendMoney(from: string, to: string, amount: number) {
return test.step(`send ${amount} from ${from} to ${to}`, async () => {
await this.accounts.open(from);
await this.accounts.clickTransfer();
await this.transfer.fill(to, amount);
await this.transfer.confirm();
});
}
}
test.step групує дії у звіті і трейсі, тому падіння видно як "send 100 from A to B", а не як клік без контексту. test.step повертає значення колбека. Опція { box: true } показує місце помилки в рядку виклику кроку, а не всередині.
Коли НЕ варто: ховати у Facade те, що тест і перевіряє. Якщо тест про валідацію форми переказу, він має працювати з TransferPage напряму. Facade потрібен для передумов і повторюваних наскрізних шляхів.
Типова помилка: шари Test -> Steps -> Actions -> Pages -> Components, де кожен шар просто прокидає виклик. Це не абстракція, а непрямість, яку важко дебажити.
test.step для звіту. Його використовують для передумов, а те, що перевіряє тест, лишають видимим у самому тесті.