# testing_app A Sample app that shows different types of testing in Flutter. This particular sample uses the [Provider][] package but any other state management approach would do. [provider]: https://pub.dev/packages/provider ## Goals for this sample Show how to perform: - Widget Testing, - Integration Testing, - Performance Testing, and - State Management Testing using the [Provider][] package. ## How to run tests - Navigate to the project's root folder using command line and follow the instructions below. ### To run tests using only the Flutter SDK: The Flutter SDK can run unit tests and widget tests in a virtual machine, without the need of a physical device or emulator. - To run all the test files in the `test/` directory in one go, run `flutter test`. - To run a particular test file, run `flutter test test/` ### To run tests on a physical device/emulator: - Widget Tests: - Run `flutter run test/` - Integration Tests: - Run `flutter drive --driver=integration_test/driver.dart --target=integration_test/app_test.dart` - Performance Tests: - Run `flutter drive --driver=integration_test/perf_driver.dart --target=integration_test/perf_test.dart --profile --trace-startup` - Using a physical device and running performance tests in profile mode is recommended. - The `--trace-startup` option is used to avoid flushing older timeline events when the timeline gets long. - State Management Tests: - For testing state using Flutter Integration Tests - Run `flutter drive --driver=integration_test/driver.dart --target=integration_test/state_mgmt_test.dart` ### To generate test coverage report: - Install the `lcov` tool: - For MacOS, run `brew install lcov` - For Linux, run `sudo apt install lcov` - Run tests with coverage: - `flutter test --coverage` - Convert `lcov.info` into readable html: - Run `genhtml coverage/lcov.info -o coverage/index` - Open `coverage/index/index.html` in your preferred browser. ### CI/CD - Refer [.github](../.github) and the [tool](../tool) directory to see how to test Flutter projects using GitHub Actions. Note that tools like GitHub Actions can't run tests on a physical device, which is required to run integration tests. Instead, you can use [Firebase Test Lab](https://firebase.google.com/docs/test-lab), [Codemagic](https://docs.codemagic.io/testing/aws/) or any platform of your choice to do that. ## Questions/issues If you have a general question about testing in Flutter, the best places to go are: - [Flutter documentation](https://flutter.dev/) - [StackOverflow](https://stackoverflow.com/questions/tagged/flutter) If you run into an issue with the sample itself, please [file an issue](https://github.com/flutter/samples/issues).