考虑以下提供程序:
final provider = FutureProvider.autoDispose<Metadata>(
(ref) async {
final response = await ref.read(service).run();
return response;
},
dependencies: [service],
name: 'provider',
);
字符串
我想模拟这个提供程序,以便能够操纵它的状态(AsyncData
,AsyncError
等)。目前我有以下代码:
abstract class _Create<T> {
FutureOr<T> call(AutoDisposeFutureProviderRef<T> ref);
}
class _ProviderCreate extends Mock implements _Create<Metadata> {}
test('test', () async {
final mockFunction = _ProviderCreate();
final container = ProviderContainer(
overrides: [
provider.overrideWith(mockFunction),
],
);
final listener = ListenerMock<HomeScreenMetadata>();
// homePageProvider is a second provider that watch `provider`
container.listen<HomePageMetadata>(homePageProvider, listener, fireImmediately: true);
when(() => mockFunction.call(any())).thenAnswer((_) async {
// This mock is never called
print("called");
...
});
await container.pump();
const homePageUnloaded = HomePageMetadata(loaded: false);
const homePageLoaded = HomeScreenMetadata(loaded: true);
verifyInOrder(
[
() => listener(null, homePageUnloaded),
() => listener(homePageUnloaded, homePageLoaded),
],
);
verifyNoMoreInteractions(listener);
});
型
但是由于某种原因,mockFunction
的mock从未被调用。
1条答案
按热度按时间gfttwv5a1#
我最终在每个测试中覆盖了容器,而不是使用一个可以在每个测试中被覆盖的mock函数。工作代码:
字符串