Sparround

Widget testing

Flutter test piramidası üç səviyyədən ibarətdir: unit (məntiq, Flutter olmadan), widget (bir widget və ya ekran, real cihaz olmadan), integration (bütöv tətbiq, real cihaz/emulator).

Widget test ən yaxşı balansdır: real UI ilə işləyir, amma cihaz lazım deyil və saniyələr çəkir. testWidgets funksiyası WidgetTester verir:

  • tester.pumpWidget(...) — widget ağacını qurur
  • find.text(...), find.byType(...), find.byKey(...) — element tapır
  • tester.tap(...), tester.enterText(...) — qarşılıqlı əlaqə
  • expect(finder, findsOneWidget) — yoxlama

`pump` və `pumpAndSettle` fərqi widget testinin ən çox səhv edilən hissəsidir:

  • pump()bir frame irəli aparır
  • pump(Duration) — göstərilən qədər vaxt keçirir
  • pumpAndSettle() — heç bir animasiya qalmayana qədər frame-ləri işlədir

pumpAndSettle rahatdır, amma sonsuz animasiya varsa (məsələn dayanmadan fırlanan CircularProgressIndicator) test timeout ilə donur. Belə hallarda dəqiq pump(Duration(...)) istifadə olunur.

Digər vacib nöqtə: widget testində şəbəkə sorğusu olmamalıdır — repository saxta ilə əvəzlənir, əks halda test yavaş və qeyri-stabil olur.

Interview ipucu. QA fonu olan namizəddən Flutter testi barədə daha çox gözlənilir. Güclü cavabda nəyi test etdiyini göstər: davranışı, implementasiyanı yox. find.byType(Padding) kimi yoxlama refactoring-də sınır və heç nə sübut etmir; find.text('Sifariş yaradıldı') isə istifadəçinin gördüyü nəticəni yoxlayır. Bu ayrım Playwright-dakı locator seçimi ilə eyni prinsipdir.

📚 Mənbələr və sənədlər