WidgetTest code를 작성하는데 에러가 발생하였다.
testWidgets('Loading page widget', (WidgetTester tester) async {
await tester
.pumpWidget(AppSplashScreen());
...
});
❌ 이렇게만 작성을 했는데 에러가 발생했다. 에러가 발생한 이유는, AppSplashScreen()
안에 provider
가 적용되어져 있었기 때문이다.
로그를 보면,
Testing started at 5:24 오후 ...
/Users/---/flutter/bin/flutter --no-color test --machine --plain-name "Loading page widget" test/widget_test_loadingpage.dart
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building SafeArea(avoid left padding, avoid top padding, avoid
right padding, avoid bottom padding, dirty):
No MediaQuery widget found.
SafeArea widgets require a MediaQuery widget ancestor.
The specific widget that could not find a MediaQuery ancestor was:
SafeArea
The ownership chain for the affected widget is: "SafeArea ← AppSplashScreen ← [root]"
Typically, the MediaQuery widget is introduced by the MaterialApp or WidgetsApp widget at the top of
your application widget tree.
The relevant error-causing widget was:
SafeArea
...
이렇게 에러가 났다. 여기서 주의해서 볼 점은
이 부분이다.
📌 수정된 코드는 다음과 같다.
testWidgets('Loading page widget', (WidgetTester tester) async { await tester .pumpWidget(MaterialApp(home: SafeArea(child: AppSplashScreen()))); });
이렇게 작성을 하니, 에러가 해결됐다. Provider
때문에 MaterialApp까지 불러야 하는 것 같다.