elementary_test 2.0.1 elementary_test: ^2.0.1 copied to clipboard
A testing library which makes it easy to test elementary used apps. Built to be used with the elementary architecture package.
Elementary-test #
#
#
Description #
A handy testing library for apps built with Elementary.
Overview #
This library offers some handy tools to test WidgetModel
from the Elementary package.
testWidgetModel method #
The main testing tool is the testWidgetModel
function, which executes a test. The parameters it requires are the name of the test, the function preparing the WidgetModel
for testing, and the test function itself.
a testFunction parameter #
This is a function of the test itself. When passed the WidgetModel
, this function describes its behavior and verifies the result. The function also uses a tester to manipulate the phases of the WidgetModel
lifecycle and a BuildContext
mock.
How to use #
void main() {
late TestPageModelMock model;
late ThemeWrapperMock theme;
late TextThemeMock textTheme;
TestPageWidgetModel setUpWm() {
textTheme = TextThemeMock();
when(() => textTheme.headline4).thenReturn(null);
theme = ThemeWrapperMock();
when(() => theme.getTextTheme(any())).thenReturn(textTheme);
model = TestPageModelMock();
when(() => model.value).thenReturn(0);
when(() => model.increment()).thenAnswer((invocation) => Future.value(1));
return TestPageWidgetModel(model, theme);
}
testWidgetModel<TestPageWidgetModel, TestPageWidget>(
'counterStyle should be headline4',
setUpWm,
(wm, tester, context) {
final style = TextStyleMock();
when(() => textTheme.headline4).thenReturn(style);
tester.init();
expect(wm.counterStyle, style);
},
);
testWidgetModel<TestPageWidgetModel, TestPageWidget>(
'when call increment and before get answer valueState should be loading',
setUpWm,
(wm, tester, context) async {
tester.init();
when(() => model.increment()).thenAnswer(
(invocation) => Future.delayed(
const Duration(milliseconds: 30),
() => 1,
),
);
unawaited(wm.increment());
await Future<void>.delayed(
const Duration(milliseconds: 10),
);
final value = wm.valueState.value;
expect(value, isNotNull);
expect(value!.isLoading, isTrue);
},
);
}
Maintainer #
Mikhail Zotyev
Contributors thanks #
Big thanks to all these people, who put their effort into helping the project.
Special thanks to:
Dmitry Krutskikh, Konoshenko Vlad, and Denis Grafov for the early adoption and the first production feedback;
Alex Bukin for IDE plugins;
All members of the Surf Flutter Team for actively using and providing feedback.
Sponsorship #
Special sponsor of the project:
For all questions regarding sponsorship/collaboration connect with Mikhail Zotyev.