• Stars
    star
    111
  • Rank 311,684 (Top 7 %)
  • Language
    Dart
  • License
    MIT License
  • Created over 3 years ago
  • Updated 4 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,107
star
2

dart_frog

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

formz

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

very_good_analysis

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

very_good_workflows

Reusable GitHub workflows used at Very Good Ventures πŸ¦„
CSS
286
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
168
star
7

very_good_coverage

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

very_good_core

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

awesome_dart_frog

An awesome repo with Dart Frog articles, tutorials, plugins, and more! Created by Very Good Ventures.
104
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++
80
star
12

very_good_ranch

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

flutter_web_preloader

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

r13n

Regionalization support for Flutter. Built by Very Good Ventures πŸ¦„
Dart
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
62
star
17

pub_updater

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

very_good_templates

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

cli_completion

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

very_good_flutter_package

A Very Good Flutter Package Template created by the Very Good Ventures Team πŸ¦„
Dart
41
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
17
star
24

very_good_docs_site

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

very_good_dart_package

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

very_good_hub

An end-to-end example of Flutter+Dart Frog application, using authentication
Dart
13
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