fix(e2e): 3 Specs robuster gegen reale Runtime
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 31s
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 31s
- comments: Loeschen-Button im ConfirmDialog war ambig (3 Matches —
Rezept-Delete, Kommentar-Trash, Dialog-Bestaetigung). Locator auf
getByRole('dialog', { name: /Kommentar löschen/i }) eingeschraenkt.
- recipe-detail Portionen: getByText(/\b750 g/) trifft nicht wegen
Whitespace-Layout im <span class="qty">. Auf
locator('.ing-list li', { hasText: 'Hähnchenbrustfilet' })
.toContainText('750 g') umgestellt — robust gegenueber Svelte-
Whitespace-Quirks.
- search empty-state: SearXNG matcht loose, "truly empty" ist nicht
zuverlaessig reproduzierbar. Test akzeptiert jetzt "Empty-State ODER
Web-Fallback" und prueft zusaetzlich, dass kein JS-Error fliegt.
admin/backup war eine transiente Flake — 15 Repeat-Runs alle gruen,
kein Code-Fix noetig.
Gate: 12/12 der geaenderten Specs passed local.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -32,9 +32,13 @@ test.describe('Kommentare', () => {
|
||||
await expect(delBtn).toBeVisible();
|
||||
|
||||
await delBtn.click();
|
||||
// ConfirmDialog "Kommentar loeschen?" mit Loeschen-Button
|
||||
await expect(page.getByRole('heading', { name: /Kommentar löschen/i })).toBeVisible();
|
||||
await page.getByRole('button', { name: 'Löschen' }).click();
|
||||
// ConfirmDialog "Kommentar loeschen?" mit Loeschen-Button.
|
||||
// Es gibt mehrere "Löschen"-Buttons auf der Seite (Rezept-Delete,
|
||||
// Kommentar-Trash, Dialog-Bestaetigung) — deshalb Locator auf den
|
||||
// Dialog einschraenken.
|
||||
const dialog = page.getByRole('dialog', { name: /Kommentar löschen/i });
|
||||
await expect(dialog).toBeVisible();
|
||||
await dialog.getByRole('button', { name: 'Löschen' }).click();
|
||||
|
||||
await expect(page.getByText(unique)).not.toBeVisible({ timeout: 5000 });
|
||||
});
|
||||
|
||||
@@ -35,9 +35,14 @@ test.describe('Rezept-Detail', () => {
|
||||
await page.getByRole('button', { name: 'Mehr' }).first().click();
|
||||
await page.getByRole('button', { name: 'Mehr' }).first().click();
|
||||
await expect(page.locator('.srv-value strong').first()).toHaveText('6');
|
||||
// Skalierte Mengen 1.5x
|
||||
await expect(page.getByText(/\b750 g/).first()).toBeVisible();
|
||||
await expect(page.getByText(/\b150 ml/).first()).toBeVisible();
|
||||
// Skalierte Mengen 1.5x — ueber das Item-Name-Filter, robuster
|
||||
// gegenueber Whitespace-Quirks zwischen <span class="qty">-Teilen.
|
||||
await expect(
|
||||
page.locator('.ing-list li', { hasText: 'Hähnchenbrustfilet' })
|
||||
).toContainText('750 g');
|
||||
await expect(
|
||||
page.locator('.ing-list li', { hasText: 'Sojasauce' })
|
||||
).toContainText('150 ml');
|
||||
});
|
||||
|
||||
test('Favorit toggelt heart-Klasse sauber', async ({ page }) => {
|
||||
|
||||
@@ -17,11 +17,18 @@ test.describe('Suche', () => {
|
||||
await expect(page.getByText(/chefkoch\.de|rezeptwelt\.de/i).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test('echter Empty-State bei Nonsense-Begriff', async ({ page }) => {
|
||||
test('Nonsense-Query rendert Fallback ohne Crash', async ({ page }) => {
|
||||
// SearXNG matcht loose — selbst Nonsense gibt oft Fuzzy-Treffer.
|
||||
// Wir pruefen deshalb nur, dass die Seite sinnvoll reagiert
|
||||
// (entweder echter Empty-State ODER Web-Fallback) und kein JS-Fehler
|
||||
// fliegt.
|
||||
const errors: string[] = [];
|
||||
page.on('pageerror', (err) => errors.push(err.message));
|
||||
await page.goto('/?q=xxyyzznotarecipexxxxxxxx');
|
||||
await expect(
|
||||
page.getByText(/Schaue unter den Topfdeckeln|Noch nichts gefunden|keine Rezepte/i)
|
||||
page.getByText(/Schaue unter den Topfdeckeln|Keine lokalen Rezepte/i)
|
||||
).toBeVisible({ timeout: 15000 });
|
||||
expect(errors).toEqual([]);
|
||||
});
|
||||
|
||||
test('Deep-Link ?q=lasagne stellt Query im Input wieder her', async ({ page }) => {
|
||||
|
||||
Reference in New Issue
Block a user