Modern and elegant test framework for Flutter, inspired by Cypress

flutter_modern_test: Modern, elegant and productive test framework for Flutter, inspired by Cypress

GitHub: https://github.com/fzyzcjy/flutter_modern_test

Why?

Writing tests should be as easy as speaking to a human being about what is expected to happen. No extra care and code should be made for anything else.

Features

  • Human-readable GUI for reviewing and debugging: See the video below.
  • Test recording and time-traveling: Look at screenshots of any step of the test. Easily figure out what is happening. Make debugging much easier (at least for me).
  • Robust with retry-ability: Integration tests are fragile and easy to fail. Now, the retry-ability (explanation in Cypress) will automatically retry and make it much more robust.
  • Planned: Other features that Cypress has: Take a look at their website.

Video demo

Before I record video of flutter_modern_test (since I am not sure whether people are interested in this lib, I do not spend much time on writing readme), please watch this Cypress video and imagine the counterpart…



## Finding co-authors

I have long been wishing that Flutter could have a testing framework as productive as Cypress in JavaScript; but with a long wait there is still none yet. So I write one (many thanks for Cypress’s inspiration!).

Obviously, the rich features of Cypress itself are not made by one programmer. Even if I have made the core functionality for this library, there are still many features to add. If you are interested, please contact me (maybe via GitHub issues)!

Example

Code looks like:

tTestWidgets('test one', (t) async {
  // tap, drag, ... anything you like
  await t.get('load_data_button').tap();
  
  // With retry-ability, no need to wait for data to be loaded or retry.
  await t.get('My Title').should(findsOneWidget);
  
  // some other examples
  await t.logout();
  await t.routeName().shouldEquals('/create_chat');
});

UI looks like: (See that video above)

Status

I have used it internally for my app (in production) and it worked well. But to make it a great open-source project, work is still needed.

The current code repository lacks some trivial internal library dependencies, but of course I will port them here soon.

GitHub

View Github