• Stars
    star
    112
  • Rank 312,240 (Top 7 %)
  • Language
    Dart
  • License
    MIT License
  • Created over 3 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A package that makes it easy to mock, test, and verify navigation in Flutter. Created by Very Good Ventures πŸ¦„

πŸ•Š mockingjay

Very Good Ventures Very Good Ventures

Developed with πŸ’™ by Very Good Ventures πŸ¦„

ci coverage pub package License: MIT style: very good analysis


A package that makes it easy to mock, test and verify navigation calls in Flutter. It works in tandem with mocktail, allowing you to mock a navigator the same way you would any other object, making it easier to test navigation behavior independently from the UI it's supposed to render.

Usage

To use the package in your tests, install it via dart pub add:

dart pub add dev:mockingjay

Then, in your tests, create a MockNavigator class like so:

import 'package:mockingjay/mockingjay.dart';

final navigator = MockNavigator();

Now you can create a new MockNavigator and pass it to a MockNavigatorProvider.

Any widget looking up the nearest Navigator.of(context) from that point will now receive the MockNavigator, allowing you to mock (using when) and verify any navigation calls. Use the included matchers to more easily match specific route names and types.

Note: make sure the MockNavigatorProvider is constructed below the MaterialApp. Otherwise, any Navigator.of(context) call will return a real NavigatorState instead of the mock.

Example

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

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: TextButton(
        onPressed: () => Navigator.of(context).push(MySettingsPage.route()),
        child: const Text('Navigate'),
      ),
    );
  }
}

class MySettingsPage extends StatelessWidget {
  const MySettingsPage({super.key});

  static Route<void> route() {
    return MaterialPageRoute(
      builder: (_) => const MySettingsPage(),
      settings: const RouteSettings(name: '/settings'),
    );
  }

  @override
  Widget build(BuildContext context) {
    return const Scaffold();
  }
}

void main() {
  testWidgets('pushes SettingsPage when TextButton is tapped', (tester) async {
    final navigator = MockNavigator();
    when(() => navigator.push<void>(any())).thenAnswer((_) async {});

    await tester.pumpWidget(
      MaterialApp(
        home: MockNavigatorProvider(
          navigator: navigator,
          child: const MyHomePage(),
        ),
      ),
    );

    await tester.tap(find.byType(TextButton));

    verify(
      () => navigator.push<void>(
        any(
          that: isRoute<void>(
            whereName: equals('/settings'),
          ),
        ),
      ),
    ).called(1);
  });
}

More Repositories

1

very_good_cli

A Very Good Command-Line Interface for Dart created by Very Good Ventures πŸ¦„
Dart
2,149
star
2

dart_frog

A fast, minimalistic backend framework for Dart 🎯
Dart
1,830
star
3

formz

A unified form representation in Dart used at Very Good Ventures πŸ¦„
Dart
378
star
4

very_good_analysis

Lint rules for Dart and Flutter used internally at Very Good Ventures πŸ¦„
Dart
357
star
5

very_good_workflows

Reusable GitHub workflows used at Very Good Ventures πŸ¦„
CSS
292
star
6

very_good_infinite_list

A Very Good Infinite List Widget created by Very Good Ventures. Great for activity feeds, news feeds, and more. πŸ¦„
Dart
171
star
7

very_good_coverage

GitHub Action which helps enforce code coverage threshold using lcov created by Very Good Ventures πŸ¦„
JavaScript
159
star
8

very_good_core

A Very Good Flutter Starter Project created by the Very Good Ventures Team πŸ¦„
C++
131
star
9

awesome_dart_frog

An awesome repo with Dart Frog articles, tutorials, plugins, and more! Created by Very Good Ventures.
105
star
10

very_good_flame_game

A Very Good Flutter Starter Flame Game created by the Very Good Ventures Team πŸ¦„
Dart
85
star
11

very_good_performance

Utility on top of the Flutter Driver API that facilitates measuring the performance of your app in an automated way created by Very Good Ventures πŸ¦„
C++
81
star
12

very_good_ranch

A very good Flame game built by Very Good Ventures πŸ¦„
Dart
75
star
13

r13n

Regionalization support for Flutter. Built by Very Good Ventures πŸ¦„
Dart
72
star
14

flutter_web_preloader

A brick that creates a smart web entrypoint for Flutter and preloads any type of asset before starting an app.
JavaScript
71
star
15

very_good_wear_app

A Very Good Flutter Wear OS App Starter Project created by the Very Good Ventures Team πŸ¦„
Dart
65
star
16

flame_behaviors

An implementation of the behavioral composition pattern for Flame. Built by Very Good Ventures πŸ¦„
Dart
64
star
17

very_good_templates

Collection of open-source templates created and maintained by Very Good Ventures.
Dart
61
star
18

pub_updater

A Dart package which supports checking if a current package is up-to-date.
Dart
55
star
19

cli_completion

Completion functionality for Dart Command-Line Interfaces built using CommandRunner. Built by Very Good Ventures. πŸ¦„
Dart
49
star
20

very_good_flutter_package

A Very Good Flutter Package Template created by the Very Good Ventures Team πŸ¦„
Dart
42
star
21

very_good_dart_cli

A Very Good Dart CLI Template created by the Very Good Ventures Team πŸ¦„
Dart
33
star
22

very_good_flutter_plugin

A Very Good Flutter Federated Plugin created by the Very Good Ventures Team πŸ¦„
Dart
29
star
23

very_good_test_runner

A test runner for Flutter and Dart created by Very Good Ventures πŸ¦„
Dart
18
star
24

very_good_hub

An end-to-end example of Flutter+Dart Frog application, using authentication
Dart
15
star
25

very_good_docs_site

A Very Good Documentation Site created by the Very Good Ventures Team πŸ¦„
JavaScript
15
star
26

very_good_dart_package

A Very Good Dart Package Template created by the Very Good Ventures Team πŸ¦„
Dart
14
star
27

flame_steering_behaviors

Flame behaviors used to organically manage the movement of an entity. Built by Very Good Ventures πŸ¦„
Dart
10
star
28

.github

7
star
29

changelogs

Changelogs for open source tools maintained by Very Good Ventures.
TypeScript
5
star
30

very_good_dictionaries

Custom cspell dictionaries used at Very Good Ventures πŸ¦„
4
star
31

flutter_and_friends_tic_tac_toe

Flutter and Friend workshop about Tic Tac Toe
Dart
1
star