CodeBlanks Logo Icon CodeBlanks

testWidgets

Write widget render tests with testWidgets.

testWidgets

testWidgets registers a widget test. Inside it, you use the WidgetTester to render a widget by calling pumpWidget, then verify with expect. The test body is async because pumpWidget returns a Future.

testWidgets('shows button', (tester) async {
  await tester.pumpWidget(MaterialApp(home: MyButton()));
  expect(find.byType(ElevatedButton), findsOneWidget);
});

expect and Matcher

expect compares an actual value against an expected value. The first parameter is the actual value (usually a Finder), the second is a Matcher. findsOneWidget verifies exactly one widget, findsNothing verifies none, and findsNWidgets(3) verifies exactly N.

Practice Write a button test

In main, write a testWidgets test named 'buton gosterilir'. Render MaterialApp(home: ElevatedButton(onPressed: () {}, child: Text('Tikla'))) with pumpWidget. Verify with find.byType(ElevatedButton) and findsOneWidget. Finally print 'test tanimlandi'.

Starter code

main.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';

void main() {
  // 'buton gosterilir' adlı testWidgets testi yaz
  // pumpWidget ile MaterialApp içinde ElevatedButton render et
  // find.byType ile ElevatedButton bul ve findsOneWidget ile doğrula
  // son olarak 'test tanimlandi' yazdir
}

Sample solution

main.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';

void main() {
  testWidgets('buton gosterilir', (tester) async {
    await tester.pumpWidget(
      MaterialApp(
        home: ElevatedButton(
          onPressed: () {},
          child: const Text('Tikla'),
        ),
      ),
    );
    expect(find.byType(ElevatedButton), findsOneWidget);
  });
  print('test tanimlandi');
}

Expected output

test tanimlandi

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 Why is await used before the pumpWidget call?

  • Because it returns void
  • Because it returns Widget
  • Because it returns int
  • Because it returns a Future and we must wait Correct answer

Explanation: pumpWidget returns a Future; await is used so the render completes before continuing.

2 pumpWidget call

Question
await tester.____(MaterialApp(home: MyButton()));
Answer
await tester.pumpWidget(MaterialApp(home: MyButton()));

Explanation: WidgetTester.pumpWidget renders the given widget in the test environment; pump advances a single frame.

3 testWidgets matches

Term Meaning
testWidgets Registers a widget test
WidgetTester Test tool
pumpWidget Renders a widget
expect Compares

All lessons in Advanced