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
  ...

이렇게 에러가 났다. 여기서 주의해서 볼 점은
image

이 부분이다.

📌 수정된 코드는 다음과 같다.

testWidgets('Loading page widget', (WidgetTester tester) async {
  await tester
      .pumpWidget(MaterialApp(home: SafeArea(child: AppSplashScreen())));
});

이렇게 작성을 하니, 에러가 해결됐다. Provider 때문에 MaterialApp까지 불러야 하는 것 같다.

profile
Hello Universe!

0개의 댓글