diff --git a/packages/mocktail/CHANGELOG.md b/packages/mocktail/CHANGELOG.md index 16f2871..2be234a 100644 --- a/packages/mocktail/CHANGELOG.md +++ b/packages/mocktail/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.0.2-dev.5 + +- fix: `verify` should use arg matcher from invocation if a matcher wasn't provided + # 0.0.2-dev.4 - **BREAKING** fix: `verifyInOrder` handles multiple method invocation verifications diff --git a/packages/mocktail/lib/src/_is_invocation.dart b/packages/mocktail/lib/src/_is_invocation.dart index f297939..cba2fbc 100644 --- a/packages/mocktail/lib/src/_is_invocation.dart +++ b/packages/mocktail/lib/src/_is_invocation.dart @@ -253,9 +253,21 @@ class _InvocationForMatchedArguments extends Invocation { while (storedIndex < _storedArgs.length && positionalIndex < invocation.positionalArguments.length) { final arg = _storedArgs[storedIndex]; - positionalArguments.add(arg); - storedIndex++; - positionalIndex++; + final dynamic positionalArgument = + invocation.positionalArguments[positionalIndex]; + if (positionalArgument == null || + positionalArgument == arg._fallbackValue) { + // Add the [ArgMatcher] given to the argument matching helper. + positionalArguments.add(arg); + storedIndex++; + positionalIndex++; + } else { + // An argument matching helper was not used; add the [ArgMatcher] from + // [invocation]. + positionalArguments + .add(invocation.positionalArguments[positionalIndex]); + positionalIndex++; + } } while (positionalIndex < invocation.positionalArguments.length) { // Some trailing non-ArgMatcher arguments. diff --git a/packages/mocktail/pubspec.yaml b/packages/mocktail/pubspec.yaml index 3bce326..d521fae 100644 --- a/packages/mocktail/pubspec.yaml +++ b/packages/mocktail/pubspec.yaml @@ -1,6 +1,6 @@ name: mocktail description: A Dart mocking library which simplifies mocking with null safety support and no manual mocks or code generation. -version: 0.0.2-dev.4 +version: 0.0.2-dev.5 repository: https://github.com/felangel/mocktail homepage: https://github.com/felangel/mocktail/tree/main/packages/mocktail diff --git a/packages/mocktail/test/mocktail_test.dart b/packages/mocktail/test/mocktail_test.dart index 1f6f4d8..0598650 100644 --- a/packages/mocktail/test/mocktail_test.dart +++ b/packages/mocktail/test/mocktail_test.dart @@ -25,6 +25,7 @@ class Foo { void voidWithDefaultNamedArg({int x = 0}) {} void voidWithDefaultNamedArgs({int x = 0, int y = 0}) {} void voidWithPositionalAndOptionalNamedArg(int x, {int? y}) {} + void voidWithPositionalArgs(int x, int y) {} } class Bar { @@ -413,6 +414,12 @@ void main() { ); }); + test('when voidWithPositionalArgs with partial matchers', () { + when(() => foo.voidWithPositionalArgs(any(), any())).thenReturn(null); + expect(() => foo.voidWithPositionalArgs(1, 10), returnsNormally); + verify(() => foo.voidWithPositionalArgs(1, any())).called(1); + }); + test('throws Exception when thenThrow is used to stub the mock', () { final exception = Exception('oops'); when(() => foo.streamValue).thenThrow(exception);