gen_expects 0.1.5 icon indicating copy to clipboard operation
gen_expects: ^0.1.5 copied to clipboard

Code generator that walks the widget tree of the test app and outputs expect statements for widget tests.

gen_expects #

gen_expects

Code generator that walks the widget tree of a test app and generates expect statements for Flutter widgets tests.

How to use GenExpects #

Insert a call to genExpects into your widget test:

void main() {
    testWidgets('Confirm all widgets appear', (WidgetTester tester) async {
        await tester.pumpWidget(const MyApp());

        await genExpects(tester);
    });
}

GenExpects walks the widget tree of your test app and generates expect statements. Rather than generating a .dart test file, GenExpects outputs to the debug console or terminal:

/// Replace your call to generateExpects with the code below.
expect(find.byType(MyHomePage), findsOneWidget);
expect(find.byKey(MainKeys.appBar), findsOneWidget);
expect(find.byType(Fab), findsOneWidget);
expect(find.text('You have pushed the button this many times:'), findsOneWidget);
expect(find.text('0'), findsOneWidget);
expect(find.text('Flutter Demo Home Page'), findsOneWidget);

Following the instructions in the first line of the output that reads /// Replace your call to generateExpects with the code below, you copy the statements and paste them into your test:

void main() {
    testWidgets('Confirm all widgets appear', (WidgetTester tester) async {
        await tester.pumpWidget(const MyApp());

        expect(find.byType(MyHomePage), findsOneWidget);
        expect(find.byKey(MainKeys.appBar), findsOneWidget);
        expect(find.byType(Fab), findsOneWidget);
        expect(find.text('You have pushed the button this many times:'), findsOneWidget);
        expect(find.text('0'), findsOneWidget);
        expect(find.text('Flutter Demo Home Page'), findsOneWidget);
    });
}

And voila! You have written your widget's first test!

The details #

The widget tree of your test app can be quite large, so rather than include all widgets and generating dozens or hundreds of expects, GenExpects generates expects for:

  • Widgets with types passed to the widgetTypes parameter.
  • Text widgets.
  • Widgets with keys formatted by gen_keys.

Expects for widget types #

To pass widget types to widgetTypes put them in a Set:

final Set<Type> myWidgetTypes = <Type>{
  Fab,
  MyHomePage,
};

And then pass the Set to genExpects:

 await genExpects(tester, widgetTypes: myWidgetTypes);

GenExpects generates an expect statement for every widgetType found:

/// Replace your call to generateExpects with the code below.
expect(find.byType(MyHomePage), findsOneWidget);
expect(find.byType(Fab), findsOneWidget);

Expects for Text widgets #

Text widgets always generates expect statements:

/// Replace your call to generateExpects with the code below.
expect(find.text('You have pushed the button this many times:'), findsOneWidget);
expect(find.text('0'), findsOneWidget);
expect(find.text('Flutter Demo Home Page'), findsOneWidget);

Expects for widgets with keys #

GenExpects also creates expects for widgets with keys formatted by gen_keys. Please see the gen_keys package for more detail:

/// Replace your call to generateExpects with the code below.
expect(find.byKey(MainKeys.appBar), findsOneWidget);

Use after gestures, too! #

GenExpects generates diff outputs when run in the same widget test. E.g.,

    testWidgets('Confirm all widgets appear', (WidgetTester tester) async {
        await tester.pumpWidget(const MyApp());

        genExpects(tester);              // <- Outputs all found expects
        tester.tap(find.byType(Fab));    // <- Gesture
        genExpects(tester);              // <- Outputs only expects that changed
    });

Because the second call to genExpects only outputs changes, it is handy for writing tests with gestures and for debugging.

That's it! #

For questions or anything else GenExpects, feel free to create an issue or contact me.

3
likes
120
pub points
56%
popularity

Publisher

verified publisher iconrichardcoutts.com

Code generator that walks the widget tree of the test app and outputs expect statements for widget tests.

Repository (GitHub)
View/report issues

License

Icon for licenses.MIT (LICENSE)

Dependencies

analyzer, flutter, flutter_test

More

Packages that depend on gen_expects