6.5 KiB
Analyse der fehlschlagenden Tests
Übersicht
Gesamtanzahl fehlschlagender Tests: 5
- show_test.exs: 1 Fehler
- sidebar_test.exs: 4 Fehler
Kategorisierung
Kategorie 1: Test-Assertions passen nicht zur Implementierung (4 Tests)
Diese Tests erwarten bestimmte Werte/Attribute, die in der aktuellen Implementierung anders sind oder fehlen.
Kategorie 2: Datenbank-Isolation Problem (1 Test)
Ein Test schlägt fehl, weil die Datenbank nicht korrekt isoliert ist.
Detaillierte Analyse
1. show_test.exs - Custom Fields Sichtbarkeit
Test: does not display Custom Fields section when no custom fields exist (Zeile 112)
Problem:
- Der Test erwartet, dass die "Custom Fields" Sektion NICHT angezeigt wird, wenn keine Custom Fields existieren
- Die Sektion wird aber angezeigt, weil in der Datenbank noch Custom Fields von anderen Tests vorhanden sind
Ursache:
- Die LiveView lädt alle Custom Fields aus der Datenbank (Zeile 238-242 in
show.ex) - Die Test-Datenbank wird nicht zwischen Tests geleert
- Da
async: falseverwendet wird, sollten die Tests sequenziell laufen, aber Custom Fields bleiben in der Datenbank
Kategorie: Datenbank-Isolation Problem
2. sidebar_test.exs - Settings Link
Test: T3.1: renders flat menu items with icons and labels (Zeile 174)
Problem:
- Test erwartet
href="#"für Settings - Tatsächlicher Wert:
href="/settings"
Ursache:
- Die Implementierung verwendet einen echten Link
~p"/settings"(Zeile 100 insidebar.ex) - Der Test erwartet einen Placeholder-Link
href="#"
Kategorie: Test-Assertion passt nicht zur Implementierung
3. sidebar_test.exs - Drawer Overlay CSS-Klasse
Test: drawer overlay is present (Zeile 747)
Problem:
- Test sucht nach exakt
class="drawer-overlay" - Tatsächlicher Wert:
class="drawer-overlay lg:hidden focus:outline-none focus:ring-2 focus:ring-primary"
Ursache:
- Der Test verwendet eine exakte String-Suche (
~s(class="drawer-overlay")) - Die Implementierung hat mehrere CSS-Klassen
Kategorie: Test-Assertion passt nicht zur Implementierung
4. sidebar_test.exs - Toggle Button ARIA-Attribut
Test: T5.2: toggle button has correct ARIA attributes (Zeile 324)
Problem:
- Test erwartet
aria-controls="main-sidebar"am Toggle-Button - Das Attribut fehlt in der Implementierung (Zeile 45-65 in
sidebar.ex)
Ursache:
- Das
aria-controlsAttribut wurde nicht in der Implementierung hinzugefügt - Der Test erwartet es für bessere Accessibility
Kategorie: Test-Assertion passt nicht zur Implementierung (Accessibility-Feature fehlt)
5. sidebar_test.exs - Contribution Settings Link
Test: sidebar structure is complete with all sections (Zeile 501)
Problem:
- Test erwartet Link
/contribution_settings - Tatsächlicher Link:
/membership_fee_settings
Ursache:
- Der Test hat eine veraltete/inkorrekte Erwartung
- Die Implementierung verwendet
/membership_fee_settings(Zeile 96 insidebar.ex)
Kategorie: Test-Assertion passt nicht zur Implementierung (veralteter Test)
Lösungsvorschläge
Lösung 1: show_test.exs - Custom Fields Sichtbarkeit
Option A: Test-Datenbank bereinigen (Empfohlen)
- Im
setupBlock alle Custom Fields löschen, bevor der Test läuft - Oder: Explizit prüfen, dass keine Custom Fields existieren
Option B: Test anpassen
- Den Test so anpassen, dass er explizit alle Custom Fields löscht
- Oder: Die LiveView-Logik ändern, um nur Custom Fields zu laden, die tatsächlich existieren
Empfehlung: Option A - Im Test-Setup alle Custom Fields löschen
setup do
# Clean up any existing custom fields
Mv.Membership.CustomField
|> Ash.read!()
|> Enum.each(&Ash.destroy!/1)
# Create test member
{:ok, member} = ...
%{member: member}
end
Lösung 2: sidebar_test.exs - Settings Link
Option A: Test anpassen (Empfohlen)
- Test ändern, um
href="/settings"zu erwarten statthref="#"
Option B: Implementierung ändern
- Settings-Link zu
href="#"ändern (nicht empfohlen, da es ein echter Link sein sollte)
Empfehlung: Option A - Test anpassen
# Zeile 190 ändern von:
assert html =~ ~s(href="#")
# zu:
assert html =~ ~s(href="/settings")
Lösung 3: sidebar_test.exs - Drawer Overlay CSS-Klasse
Option A: Test anpassen (Empfohlen)
- Test ändern, um nach der Klasse in der Klasse-Liste zu suchen (mit
has_class?Helper)
Option B: Regex verwenden
- Regex verwenden, um die Klasse zu finden
Empfehlung: Option A - Test anpassen
# Zeile 752 ändern von:
assert html =~ ~s(class="drawer-overlay")
# zu:
assert has_class?(html, "drawer-overlay")
Lösung 4: sidebar_test.exs - Toggle Button ARIA-Attribut
Option A: Implementierung anpassen (Empfohlen)
aria-controls="main-sidebar"zum Toggle-Button hinzufügen
Option B: Test anpassen
- Test entfernen oder als optional markieren (nicht empfohlen für Accessibility)
Empfehlung: Option A - Implementierung anpassen
# In sidebar.ex Zeile 45-52, aria-controls hinzufügen:
<button
type="button"
id="sidebar-toggle"
class="hidden lg:flex ml-auto btn btn-ghost btn-sm btn-square"
aria-label={gettext("Toggle sidebar")}
aria-controls="main-sidebar"
aria-expanded="true"
onclick="toggleSidebar()"
>
Lösung 5: sidebar_test.exs - Contribution Settings Link
Option A: Test anpassen (Empfohlen)
- Test ändern, um
/membership_fee_settingsstatt/contribution_settingszu erwarten
Option B: Link hinzufügen
- Einen neuen Link
/contribution_settingshinzufügen (nicht empfohlen, da redundant)
Empfehlung: Option A - Test anpassen
# Zeile 519 ändern von:
"/contribution_settings",
# zu:
# Entfernen oder durch "/membership_fee_settings" ersetzen
# (da "/membership_fee_settings" bereits in Zeile 518 vorhanden ist)
Zusammenfassung der empfohlenen Änderungen
- show_test.exs: Custom Fields im Setup löschen
- sidebar_test.exs (T3.1): Settings-Link Assertion anpassen
- sidebar_test.exs (drawer overlay): CSS-Klasse-Suche mit Helper-Funktion
- sidebar_test.exs (T5.2):
aria-controlsAttribut zur Implementierung hinzufügen - sidebar_test.exs (edge cases): Falschen Link aus erwarteter Liste entfernen
Priorisierung
- Hoch: Lösung 1 (show_test.exs) - Datenbank-Isolation ist wichtig
- Mittel: Lösung 4 (ARIA-Attribut) - Accessibility-Verbesserung
- Niedrig: Lösungen 2, 3, 5 - Einfache Test-Anpassungen