Skip to content

Commit eda95db

Browse files
authored
feat!: support mocktail ^0.3.0 (#25)
1 parent 52c8ff5 commit eda95db

File tree

6 files changed

+69
-31
lines changed

6 files changed

+69
-31
lines changed

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ dev_dependencies:
2121
sdk: flutter
2222
mockingjay:
2323
path: ../
24-
mocktail: ^0.2.0
24+
mocktail: ^0.3.0
2525
very_good_analysis: ^2.4.0
2626

2727
flutter:

example/test/ui/home_screen_test.dart

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import 'package:mockingjay/mockingjay.dart';
66

77
import '../helpers.dart';
88

9+
class FakeRoute<T> extends Fake implements Route<T> {}
10+
911
void main() {
1012
group('HomeScreen', () {
1113
const showPincodeScreenTextButtonKey =
@@ -15,9 +17,17 @@ void main() {
1517

1618
late MockNavigator navigator;
1719

20+
setUpAll(() {
21+
registerFallbackValue(FakeRoute<String?>());
22+
registerFallbackValue(FakeRoute<QuizOption>());
23+
});
24+
1825
setUp(() {
1926
navigator = MockNavigator();
20-
when(() => navigator.push(any())).thenAnswer((_) async => null);
27+
when(() => navigator.push<String?>(any())).thenAnswer((_) async => null);
28+
when(
29+
() => navigator.push<QuizOption>(any()),
30+
).thenAnswer((_) async => null);
2131
});
2232

2333
group('show pincode screen button', () {
@@ -49,15 +59,15 @@ void main() {
4959
);
5060

5161
verify(
52-
() => navigator.push(
62+
() => navigator.push<String?>(
5363
any(that: isRoute<String?>(whereName: equals('/pincode_screen'))),
5464
),
5565
).called(1);
5666
});
5767

5868
testWidgets('displays snackbar with selected pincode', (tester) async {
5969
when(
60-
() => navigator.push(
70+
() => navigator.push<String?>(
6171
any(that: isRoute<String?>(whereName: equals('/pincode_screen'))),
6272
),
6373
).thenAnswer((_) async => '123456');
@@ -84,7 +94,7 @@ void main() {
8494
'displays snackbar when no pincode was submitted',
8595
(tester) async {
8696
when(
87-
() => navigator.push(
97+
() => navigator.push<String?>(
8898
any(
8999
that: isRoute<String?>(
90100
whereName: equals('/pincode_screen'),
@@ -139,15 +149,17 @@ void main() {
139149

140150
await tester.tap(find.byKey(showQuizDialogTextButtonKey));
141151

142-
verify(() => navigator.push(any(that: isRoute<QuizOption?>())))
143-
.called(1);
152+
verify(
153+
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
154+
).called(1);
144155
});
145156

146157
testWidgets(
147158
'displays snackbar when pizza was selected',
148159
(tester) async {
149-
when(() => navigator.push(any(that: isRoute<QuizOption?>())))
150-
.thenAnswer((_) async => QuizOption.pizza);
160+
when(
161+
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
162+
).thenAnswer((_) async => QuizOption.pizza);
151163

152164
await tester.pumpTest(
153165
builder: (context) {
@@ -171,8 +183,9 @@ void main() {
171183
testWidgets(
172184
'displays snackbar when hamburger was selected',
173185
(tester) async {
174-
when(() => navigator.push(any(that: isRoute<QuizOption?>())))
175-
.thenAnswer((_) async => QuizOption.hamburger);
186+
when(
187+
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
188+
).thenAnswer((_) async => QuizOption.hamburger);
176189

177190
await tester.pumpTest(
178191
builder: (context) {
@@ -196,8 +209,9 @@ void main() {
196209
testWidgets(
197210
'displays snackbar when no answer was selected',
198211
(tester) async {
199-
when(() => navigator.push(any(that: isRoute<QuizOption?>())))
200-
.thenAnswer((_) async => null);
212+
when(
213+
() => navigator.push<QuizOption>(any(that: isRoute<QuizOption>())),
214+
).thenAnswer((_) async => null);
201215

202216
await tester.pumpTest(
203217
builder: (context) {

lib/src/mock_navigator.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ class MockNavigator extends Mock
4242
/// {@macro mock_navigator}
4343
MockNavigator() {
4444
registerFallbackValue(_FakeRoute<dynamic>());
45+
registerFallbackValue(_FakeRoute<Object>());
46+
registerFallbackValue(_FakeRoute<void>());
47+
registerFallbackValue(_FakeRoute<bool>());
48+
registerFallbackValue(_FakeRoute<String>());
49+
registerFallbackValue(_FakeRoute<num>());
50+
registerFallbackValue(_FakeRoute<bool>());
4551
}
4652
}
4753

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ dependencies:
1414
flutter_test:
1515
sdk: flutter
1616
matcher: ^0.12.10
17-
mocktail: ^0.2.0
17+
mocktail: ^0.3.0
1818
test: ^1.17.0
1919

2020
dev_dependencies:

test/src/example_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class MySettingsPage extends StatelessWidget {
3535
void main() {
3636
testWidgets('pushes SettingsPage when TextButton is tapped', (tester) async {
3737
final navigator = MockNavigator();
38-
when(() => navigator.push(any())).thenAnswer((_) async {});
38+
when(() => navigator.push<void>(any())).thenAnswer((_) async {});
3939

4040
await tester.pumpWidget(
4141
MaterialApp(
@@ -49,7 +49,7 @@ void main() {
4949
await tester.tap(find.byType(TextButton));
5050

5151
verify(
52-
() => navigator.push(
52+
() => navigator.push<void>(
5353
any(
5454
that: isRoute<void>(
5555
whereName: equals('/settings'),

test/src/mock_navigator_test.dart

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void main() {
5555
});
5656

5757
testWidgets('mocks .push calls', (tester) async {
58-
when(() => navigator.push(any())).thenAnswer((_) async {});
58+
when(() => navigator.push<void>(any())).thenAnswer((_) async {});
5959

6060
await tester.pumpTest(
6161
navigator: navigator,
@@ -70,7 +70,7 @@ void main() {
7070
});
7171

7272
testWidgets('mocks .pushNamed calls', (tester) async {
73-
when(() => navigator.pushNamed(any())).thenAnswer((_) async {});
73+
when(() => navigator.pushNamed(any())).thenAnswer((_) async => null);
7474

7575
await tester.pumpTest(
7676
navigator: navigator,
@@ -86,7 +86,7 @@ void main() {
8686

8787
testWidgets('mocks .pushNamedAndRemoveUntil calls', (tester) async {
8888
when(() => navigator.pushNamedAndRemoveUntil(any(), any()))
89-
.thenAnswer((_) async {});
89+
.thenAnswer((_) async => null);
9090

9191
await tester.pumpTest(
9292
navigator: navigator,
@@ -109,7 +109,8 @@ void main() {
109109
});
110110

111111
testWidgets('mocks .pushReplacement calls', (tester) async {
112-
when(() => navigator.pushReplacement(any())).thenAnswer((_) async {});
112+
when(() => navigator.pushReplacement<void, Object?>(any()))
113+
.thenAnswer((_) async {});
113114

114115
await tester.pumpTest(
115116
navigator: navigator,
@@ -125,7 +126,7 @@ void main() {
125126

126127
testWidgets('mocks .pushReplacementNamed calls', (tester) async {
127128
when(() => navigator.pushReplacementNamed(any()))
128-
.thenAnswer((_) async {});
129+
.thenAnswer((_) async => null);
129130

130131
await tester.pumpTest(
131132
navigator: navigator,
@@ -156,7 +157,8 @@ void main() {
156157
});
157158

158159
testWidgets('mocks .popAndPushNamed calls', (tester) async {
159-
when(() => navigator.popAndPushNamed(any())).thenAnswer((_) async {});
160+
when(() => navigator.popAndPushNamed(any()))
161+
.thenAnswer((_) async => null);
160162

161163
await tester.pumpTest(
162164
navigator: navigator,
@@ -201,23 +203,38 @@ void main() {
201203
});
202204

203205
testWidgets('mocks .maybePop calls', (tester) async {
204-
when(() => navigator.maybePop(any<dynamic>()))
206+
when(() => navigator.maybePop()).thenAnswer((_) async => true);
207+
208+
await tester.pumpTest(
209+
navigator: navigator,
210+
builder: (context) => TextButton(
211+
onPressed: () => Navigator.of(context).maybePop(),
212+
child: const Text('Trigger'),
213+
),
214+
);
215+
216+
await tester.tap(find.byType(TextButton));
217+
verify(() => navigator.maybePop()).called(1);
218+
});
219+
220+
testWidgets('mocks .maybePop calls w/result', (tester) async {
221+
when(() => navigator.maybePop<bool>(any<bool>()))
205222
.thenAnswer((_) async => true);
206223

207224
await tester.pumpTest(
208225
navigator: navigator,
209226
builder: (context) => TextButton(
210-
onPressed: () => Navigator.of(context).maybePop(testRoutePredicate),
227+
onPressed: () => Navigator.of(context).maybePop(true),
211228
child: const Text('Trigger'),
212229
),
213230
);
214231

215232
await tester.tap(find.byType(TextButton));
216-
verify(() => navigator.maybePop(testRoutePredicate)).called(1);
233+
verify(() => navigator.maybePop<bool>(true)).called(1);
217234
});
218235

219236
testWidgets('mocks .pushAndRemoveUntil calls', (tester) async {
220-
when(() => navigator.pushAndRemoveUntil(any(), any()))
237+
when(() => navigator.pushAndRemoveUntil<void>(any(), any()))
221238
.thenAnswer((_) async {});
222239

223240
await tester.pumpTest(
@@ -257,7 +274,8 @@ void main() {
257274
});
258275

259276
testWidgets('mocks .restorablePush calls', (tester) async {
260-
when(() => navigator.restorablePush(any())).thenReturn(testRouteName);
277+
when(() => navigator.restorablePush<void>(any()))
278+
.thenReturn(testRouteName);
261279

262280
await tester.pumpTest(
263281
navigator: navigator,
@@ -274,7 +292,7 @@ void main() {
274292
});
275293

276294
testWidgets('mocks .restorablePushAndRemoveUntil calls', (tester) async {
277-
when(() => navigator.restorablePushAndRemoveUntil(any(), any()))
295+
when(() => navigator.restorablePushAndRemoveUntil<void>(any(), any()))
278296
.thenReturn(testRouteName);
279297

280298
await tester.pumpTest(
@@ -341,7 +359,7 @@ void main() {
341359
});
342360

343361
testWidgets('mocks .restorablePushReplacement calls', (tester) async {
344-
when(() => navigator.restorablePushReplacement(any()))
362+
when(() => navigator.restorablePushReplacement<void, Object?>(any()))
345363
.thenReturn(testRouteName);
346364

347365
await tester.pumpTest(
@@ -379,7 +397,7 @@ void main() {
379397

380398
testWidgets('mocks .restorableReplace calls', (tester) async {
381399
when(
382-
() => navigator.restorableReplace(
400+
() => navigator.restorableReplace<void>(
383401
oldRoute: any(named: 'oldRoute'),
384402
newRouteBuilder: any(named: 'newRouteBuilder'),
385403
),
@@ -407,7 +425,7 @@ void main() {
407425

408426
testWidgets('mocks .restorableReplaceRouteBelow calls', (tester) async {
409427
when(
410-
() => navigator.restorableReplaceRouteBelow(
428+
() => navigator.restorableReplaceRouteBelow<void>(
411429
anchorRoute: any(named: 'anchorRoute'),
412430
newRouteBuilder: any(named: 'newRouteBuilder'),
413431
),

0 commit comments

Comments
 (0)