# Instructions - Following Playwright test failed. - Explain why, be concise, respect Playwright best practices. - Provide a snippet of code with the fix, if possible. # Test info - Name: src/manager/tests/e2e/booking/booking-create.spec.ts >> creates a booking with a fixed once discount - Location: src/manager/tests/e2e/booking/booking-create.spec.ts:84:7 # Error details ``` Error: expect(locator).toHaveText(expected) failed Locator: getByTestId('app-page').getByTestId('app-page-content').locator('[data-test-id=app-details-card]:has([data-test-id=title]:has-text("General"))').locator('[data-test-id=key-value-item]:has([data-test-id=key]:text-is("Discount"))').getByTestId('value-text') Expected pattern: /^(\s*-?\s*)$/ Received string: "Soft Sale gDeJKT" Timeout: 30000ms Call log: - Expect "toHaveText" with timeout 30000ms - waiting for getByTestId('app-page').getByTestId('app-page-content').locator('[data-test-id=app-details-card]:has([data-test-id=title]:has-text("General"))').locator('[data-test-id=key-value-item]:has([data-test-id=key]:text-is("Discount"))').getByTestId('value-text') 64 × locator resolved to
Soft Sale gDeJKT
- unexpected value "Soft Sale gDeJKT" ``` ```yaml - text: Soft Sale gDeJKT ``` # Test source ```ts 1 | import { escapeRegExp } from '@/shared/utils/regex-utils'; 2 | import { expect, Locator } from '@playwright/test'; 3 | 4 | export async function expectMultiLocatorToHaveText(locator: Locator, text: string[] | undefined): Promise { 5 | if (!text) { 6 | await expectLocatorToBeEmpty(locator); 7 | return; 8 | } 9 | 10 | const expectedValue = RegExp(text.map(escapeRegExp).join('|')); 11 | 12 | for (const element of await locator.all()) { 13 | await expectSingleLocatorToHaveText(element, expectedValue); 14 | } 15 | } 16 | 17 | export async function expectSingleLocatorToHaveText( 18 | locator: Locator, 19 | text: string | RegExp | undefined 20 | ): Promise { 21 | text 22 | ? await expect(locator).toHaveText(text, { ignoreCase: true, useInnerText: true }) 23 | : await expectLocatorToBeEmpty(locator); 24 | } 25 | 26 | export async function expectLocatorToBeEmpty(locator: Locator): Promise { > 27 | await expect(locator).toHaveText(/^(\s*-?\s*)$/); | ^ Error: expect(locator).toHaveText(expected) failed 28 | } 29 | ```