This plugin can be used to facilitate the integration test on a Flutter app, handles the tests at a "higher" level.
Add this line to the dev_dependencies in the pubspec.yaml file in your project.
test_actions: ^1.0.0
If you have never used integration tests, please follow the official guide to create the files necessary to use the integration tests.
Then you just have to import the package with:
import 'package:test_actions/test_actions.dart';
Since Flutter 2 the integration_test plugin is integrated into the sdk:
dev_dependencies:
integration_test:
sdk: flutter
The first things to set up is the TestActions itself; this is the class that contains all the actions that you will execute, this class needs a WidgetTester if you don't want to set it for all the actions that you add. Of course the tester should be assigned inside the testWidgets method.
TestActions actions = TestActions();
actions.setTester(tester);
If you don't see the table below correctly, open the GitHub page.
Currently there are 5 actions that you can perform using this plugin:
Action name | Effect | Required vars |
---|---|---|
pump | Executes the pump command on the WidgetTester for a number of times defined by the {pumpTimes} variable. | If you set the awaitDuration it will be used as duration in the pump command. |
pumpAndSettle | Executes the pumpAndSettle command on the WidgetTester. | |
press | Executes the tap on the WidgetTester using a Finder. | This action needs the finder not to be null |
futureAwait | Awaits for a certain Duration. | This action needs the awaitDuration not to be null. |
customAction | Executes a custom function. | This action needs the customAction function not to be null. |
drag | Executes a drag action | This action needs the dragOffset not to be null. |
enterText | Enters a text into a textfield or a widget that accepts text as input | This function needs enterText not to be null. |
From version 1.0.0 you can assign a name to the testActions to find more easily the failed action.
You can perform all the actions in order
await actions.performActions();
Or perform only one action:
await actions.performActionAt(0);
The TestAction doesn't need to be inside the TestActions class, you can create an action and perform by itself
TestAction singleAction = TestAction(
action: TestActionType.CustomAction,
customAction: () {
print('This is a custom action');
expect(1 + 1, 2);
}
);
singleAction.performAction();
To perform the single TestAction, you can add the action index and/or the function to be called when the action is performed.