Skip to content

widget tests failing after updating to 5.9.0 #515

Closed

Description

@mleevi

Widget tests that contain ScreenUtilInit fail when using 5.9.0. Downgrading to 5.8.4 fixes the issue. Putting a tester.pumpAndSettle() after every tester.pumpWidget also solves the problem.

Activity

  1. Mounir-Bouaiche commented on Aug 25, 2023

    @Mounir-Bouaiche
    Collaborator

    What kind of errors?

  2. mleevi commented on Aug 25, 2023

    @mleevi
    ContributorAuthor

    What kind of errors?

    Finder does not find anything on the first pump (zero widgets found). After adding pumpAndsSettle after the initial pump fixes the errors.

  3. Mounir-Bouaiche commented on Aug 25, 2023

    @Mounir-Bouaiche
    Collaborator

    Put here a minimal code to reproduce the error.

  4. mleevi commented on Aug 25, 2023

    @mleevi
    ContributorAuthor

    Passes with 5.8.4, fails with 5.9.0:

    class Test extends StatefulWidget {
      const Test({super.key});
    
      @override
      State<Test> createState() => _TestState();
    }
    
    class _TestState extends State<Test> {
      @override
      Widget build(BuildContext context) {
        return ScreenUtilInit(
          designSize: const Size(430, 932),
          minTextAdapt: true,
          splitScreenMode: true,
          useInheritedMediaQuery: true,
          child: const Scaffold(body: Text('text')),
          builder: (_, child) => MaterialApp(
            localizationsDelegates: const [
              GlobalCupertinoLocalizations.delegate,
              DefaultCupertinoLocalizations.delegate,
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate,
            ],
            home: child,
          ),
        );
      }
    }
    
    void main() {
      testWidgets('description', (tester) async {
        await tester.pumpWidget(const Test());
    
        expect(find.text('text'), findsOneWidget);
      });
    }
    
  5. Mounir-Bouaiche commented on Aug 25, 2023

    @Mounir-Bouaiche
    Collaborator

    Well, that's unexpected. We're using Future in last version for the new change: ensureScreenSize as parameter. Thanks for reporting.

  6. mleevi commented on Sep 5, 2023

    @mleevi
    ContributorAuthor

    Is there any update on this? @Mounir-Bouaiche @techouse @lizhuoyuan @naivetoby

  7. github-actions commented on Oct 6, 2023

    @github-actions

    This issue is stale because it has been open for 30 days with no activity.

  8. github-actions commented on Oct 21, 2023

    @github-actions

    This issue was closed because it has been inactive for 14 days since being marked as stale.

  9. ZG-123 commented on Feb 1, 2024

    @ZG-123

    Hello everyone, how did this work out in the end? I also encountered the same problem.

  10. gustamor commented on Feb 7, 2024

    @gustamor
    Contributor

    The same issue:

    [✓] Flutter (Channel stable, 3.16.9, on macOS 14.2.1 23C71 darwin-arm64, locale es-ES)
        • Flutter version 3.16.9 on channel stable at /Users/gus/SDK/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 41456452f2 (13 days ago), 2024-01-25 10:06:23 -0800
        • Engine revision f40e976bed
        • Dart version 3.2.6
        • DevTools version 2.28.5
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
        • Android SDK at /Users/gus/Library/Android/sdk
        • Platform android-34, build-tools 34.0.0
        • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 15.0.1)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 15A507
        • CocoaPods version 1.14.3
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2023.1)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
          🔨 https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)
    
    [✓] VS Code (version 1.86.0)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.82.0
    
    
    [✓] Network resources
        • All expected network resources are available.
    

    With the test:

    void main() {
      testWidgets('should sign screen widgets exist', (WidgetTester tester) async {
        await tester.pumpWidget(
          const CupertinoApp(
            home: SignPortraitScreen(),
          ),
        );
        final scaffoldFinder = find.byKey(const Key('scaffold_sign_portrait'));
        expect(scaffoldFinder, findsOneWidget);
        final navTitleFinder = find.byKey(const Key('sign_nav_title'));
        expect(navTitleFinder, findsOneWidget);
      });
    }
    

    The test passes when SignPortraitScreen() does not use any screen utilities, with a value like height: 100, and fails when it has any value such as height: 100.h.

    Error:

    ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    The following LateError was thrown building SignPortraitScreen(dirty):
    LateInitializationError: Field '_splitScreenMode@289084504' has not been initialized.
    
    The relevant error-causing widget was:
      SignPortraitScreen
      SignPortraitScreen:file:///Users/gus/Codigo/FlutterProjects/project/test/widgets/sign_screen_portrait_test.dart:11:15
    
    When the exception was thrown, this was the stack:
    #0      ScreenUtil._splitScreenMode (package:flutter_screenutil/src/screen_util.dart)
    #1      ScreenUtil.scaleHeight (package:flutter_screenutil/src/screen_util.dart:204:8)
    #2      ScreenUtil.setHeight (package:flutter_screenutil/src/screen_util.dart:225:44)
    #3      SizeExtension.h (package:flutter_screenutil/src/size_extension.dart:12:32)
    #4      SignPortraitScreen.build (package:story_creator/ui/screens/login/sign_portrait_screen.dart:33:31)
    #5      StatelessElement.build (package:flutter/src/widgets/framework.dart:5541:49)
    #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5471:15)
    

    Always fails with:

    void main() {
      testWidgets('should sign screen widgets exist', (WidgetTester tester) async {
        await tester.pumpWidget(
          const CupertinoApp(
            home: ScreenUtilInit(
              child: SignPortraitScreen(),
            ),
          ),
        );
        final scaffoldFinder = find.byKey(const Key('scaffold_sign_portrait'));
        expect(scaffoldFinder, findsOneWidget);
        final navTitleFinder = find.byKey(const Key('sign_nav_title'));
        expect(navTitleFinder, findsOneWidget);
      });
    }
    

    Then:

    ══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
    The following TestFailure was thrown running a test:
    Expected: exactly one matching candidate
      Actual: _KeyWidgetFinder:<Found 0 widgets with key [<'scaffold_sign_portrait'>]: []>
       Which: means none were found but one was expected
    
    When the exception was thrown, this was the stack:
    #4      main.<anonymous closure> (file:///Users/gus/Codigo/FlutterProjects/project/test/widgets/sign_screen_portrait_test.dart:16:5)
    <asynchronous suspension>
    #5      testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:168:15)
    <asynchronous suspension>
    #6      TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1013:5)
    <asynchronous suspension>
    <asynchronous suspension>
    (elided one frame from package:stack_trace)
    
    This was caught by the test expectation on the following line:
      file:///Users/gus/Codigo/FlutterProjects/project/test/widgets/sign_screen_portrait_test.dart line 16
    The test description was:
      should sign screen widgets exist
    ════════════════════════════════════════════════════════════════════════════════════════════════════
    

    Works fine with tester.pumpAndSettle():

    testWidgets('should sign screen widgets exist', (WidgetTester tester) async {
        await tester.pumpWidget(
          const CupertinoApp(
            home: ScreenUtilInit(
              child: SignPortraitScreen(),
            ),
          ),
        );
      
        await tester.pumpAndSettle();
      
        final scaffoldFinder = find.byKey(const Key('scaffold_sign_portrait'));
        expect(scaffoldFinder, findsOneWidget);
        final navTitleFinder = find.byKey(const Key('sign_nav_title'));
        expect(navTitleFinder, findsOneWidget);
      });
    
  11. MohiuddinM commented on Mar 17, 2024

    @MohiuddinM

    @gustamor @ZG-123 This issue has been fixed on master for quite some time, but unfortunately, maintainers did not have the time to make a release.

  12. MohiuddinM commented on Mar 17, 2024

    @MohiuddinM

    @Mounir-Bouaiche Is it possible to make a release or is this package now unmaintained?

  13. leventkantaroglu commented on Mar 27, 2024

    @leventkantaroglu
    Contributor

    @gustamor @ZG-123 This issue has been fixed on master for quite some time, but unfortunately, maintainers did not have the time to make a release.

    What you mean with "on master"? I couldn't see any commit on master branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions