Flutter Matcher | Test your widget before using it !!

 

Flutter Matcher :

Flutter apps are built with widgets and yes every screen uses these widgets to make up a final app.So how do you test these widgets whether they work accordingly or not ??

It’s pretty hard every time to focus on each and every widget and test them before making app live isn’t then don’t worry this blog is for you stay tuned till end for interesting updates.

You might have implemented Unittest cases and UI testing and now experience the magic of similar testing strategy which test’s widgets.

Welcome to blog on flutter widget testing i.,e¬†flutter matcher let’s get started.This will be a favorite blog for beginners who are interested in ui testing.

 

Complete Widget Testing Course.

 

pubspec.yaml :

This time no new thing to be added to this file so get going with further coding and testing on flutter matcher !!!.

 

main.dart :

We need to have some widgets to test right so let’s add some in here to get started with flutter matcher.

 

Start with void main()

void main(){runApp(MyApp());}

 

And now add a class MyApp extending StatelessWidget

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Widget Testing"),
        ),
        body: Home(),
      ),
    );
  }
}

 

Let’s add a separate class where we will define our widgets to be tested.

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Column(
      children:  [
         TextField(
          decoration: InputDecoration(
            border: OutlineInputBorder(),
            labelText: "Enter Text"),
          ),

        TextButton(onPressed: (){}, child: Text(""))
      ],
    );
  }
}

 

widget_test.dart :

Just like main.dart widget_test.dart starts with a void main where in we specify the test cases using flutter matcher.

void main() {
  //Test cases
}

 

Syntax of a test case :

How we specify a test case is it similar to unittest cases ??

 

We need to specify the description and callback to test widgets.

testWidgets(description, callback)

 

Need to pump widget on the screen.

await tester.pumpWidget(MyApp());

Find the widget by type

var textField = find.byType(TextField);

 

Expect the widget to be identified

expect(textField, findsOneWidget);

 

Here we have considered a Matcher  there are different types of flutter matcher.

 

findsOneWidget : Which will find exactly one widget of type specified.

findNothing : It will verify that no widget found.

findNWidgets : It will verify the number of widgets specified.

findWidgets : Verifies one or more than one widgets.

 

Add a test case

testWidgets("FindOneWidget", (WidgetTester tester) async{
  await tester.pumpWidget(MyApp());

  var textField = find.byType(TextField);
  expect(textField, findsOneWidget);
});

 

Full code :

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

void main() {

  testWidgets("FindOneWidget", (WidgetTester tester) async{
    await tester.pumpWidget(MyApp());

    var textField = find.byType(TextField);
    expect(textField, findsOneWidget);
  });

  testWidgets("FindsNWidgets", (WidgetTester tester) async{
    await tester.pumpWidget(MyApp());

    var textField = find.byType(TextField);
    expect(textField, findsNWidgets(2));
  });

  testWidgets("FindsNothing", (WidgetTester tester) async{
    await tester.pumpWidget(MyApp());

    var textField = find.byType(TextButton);
    expect(textField, findsNothing);
  });

  testWidgets("FindsWidgets", (WidgetTester tester) async{
    await tester.pumpWidget(MyApp());

    var textField = find.byType(TextField);
    expect(textField, findsWidgets);
  });
}

 

 

If you have any query’s in this tutorial on flutter matcher do let us know in the comment section below.If you find this tutorial interesting do like and share us for more updates.

 

Show Buttons
Hide Buttons
Read previous post:
Flutter Unit-testing | Get Started

  Flutter Unit Testing: Unit testing plays a key role in software development might be in terms of website, mobile...

Close