felangel / felangel/mocktail

Should when() calls have a better error message for not having a following thenAnswer/thenReturn call?

Open
#213 1 comment 7 reactions 0 assignees View on GitHub
enhancement
Dominant language
Dart
Stars
702
Forks
88
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**
I ran into an extremely hard to diagnose bug. I wrote some tests and found that they were randomly failing with

````
Bad state: Cannot call `when` within a stub response
````
It was random because depending on if I randomized my tests sometimes the tests would pass or fail.

The reason for this was that on a prior test we had called `when(() => someFunction())` but since the the function returns `Future` I was under the assumption that the return value was unimportant and could be ignored. However, this meant that any subsequent `when` calls errored out, as `_whenCall` (inside `mocktail.dart`) was no longer `null`.

**To Reproduce**
1) Write any `when` call without a `thenAnswer/thenReturn` for a `void`/`Future` function.
2) Write another `when` call for the same mocked class.

**Expected behavior**
Not actually sure. Should `void`/`Future` be allowed by default without a `then`? This doesn't feel quite right. Or should there be a better error message like `Missing then function for when`, or just a hint on the current error message about making sure that your whens have following thens. I could also just be mistaken and there's a good reason for `when()` calls without a following `then`.

**Logs**
````
Bad state: Cannot call `when` within a stub response
package:mocktail/src/mocktail.dart 206:5 when
test/features/notifications/cubits/notification_preferences_cubit_test.dart 303:11 main...
package:bloc_test/src/bloc_test.dart 203:25 testBloc.
===== asynchronous gap ===========================
dart:async _Completer.completeError
package:bloc_test/src/bloc_test.dart 257:43 _runZonedGuarded.
===== asynchronous gap ===========================
dart:async _CustomZone.registerBinaryCallback
package:bloc_test/src/bloc_test.dart 254:5 _runZonedGuarded.
dart:async runZonedGuarded
package:bloc_test/src/bloc_test.dart 253:3 _runZonedGuarded
package:bloc_test/src/bloc_test.dart 200:11 testBloc
package:bloc_test/src/bloc_test.dart 156:13 blocTest.
````

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.