如何使用Mockito在Flutter中测试StreamBuilder?

阿马克

我正在尝试测试包含StreamBuilder的小部件,但无法返回数据。

小部件:

class HomeView extends StatelessWidget {
  final EventServiceRepository eventService;

  HomeView({this.eventService});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder<List<Event>>(
         stream: this.eventService.getEvents(dates: dates),
         builder: (context, snapshot) {
           if (!snapshot.hasData) return HomeLoading();
           return EventsView(events: snapshot.data);
         },
       )
    );
  }
}

测试:

class MockedEventService extends Mock implements EventServiceRepository {}
class MockedEventStream extends Mock implements Stream<List<Event>> {}

testWidgets('Should find EventsView', (WidgetTester tester) async {
    final mockedEventService = MockedEventService();
    final mockedEventStream = MockedEventStream();
    when(mockedEventService.getEvents(dates: ['1/1/2021']))
        .thenAnswer((_) => mockedEventStream);

    when(mockedEventStream); // return list of events?

    await tester.pumpWidget(HomeView(eventService: mockedEventService));

    expect(find.byType(EventsView), findsOneWidget);
});

我尝试了一些东西,mockedEventStream但它总是返回snapshot.hasData == false

尼克·费舍尔

有两个问题-首先,您正在模拟Stream,但没有在其上放置任何数据,因此StreamBuilder假定Stream为空。其次,一旦将数据放到Stream上,就需要再次抽出Widget来刷新StreamBuilder。我个人也不会打扰Stream本身。

我的稍微修改的版本:

final mockedEventService = MockedEventService();
when(mockedEventService.getEvents()).thenAnswer((_) => Stream.value(true));
await tester.pumpWidget(MyHomePage(eventService: mockedEventService)); 
await tester.pump(Duration.zero); 
expect(find.byKey(ObjectKey("B")), findsOneWidget);

显然需要进行更改以反映您的原始代码(模拟EventServiceRepository,返回Stream.value(List []),检查正确的Widget等)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Flutter StreamBuilder重试错误?

如何测试Flutter中流中有延迟的StreamBuilder?

如何使用Mockito测试null?

如何使用Mockito不评估测试方法中的方法

在Java中,如何使用断言测试在JUnit无效的Mockito的方法?

如何使用Mockito在Junit中测试开关案例

如何使用Mockito在Presenter中测试void方法?

如何使用Mockito在Spring Boot中测试资源加载器

使用Mockito时如何在春季测试中清理模拟

如何使用Mockito在Service类中测试void方法?

如何使用 Mockito 在 Dart 中测试 HTTP SEND?

如何使用Mockito在单元测试中调用AppCompatActivity onCreate

Flutter如何刷新StreamBuilder?

Flutter:StreamBuilder中的AnimatedSwitcher

Flutter:使用Streambuilder <QuerySnapshot>时如何在Firestore中获取特定文档

如何在要使用Mockito测试的类中测试throws子句

使用 StreamBuilder 使用 Firestore 中的数据填充 Flutter DataTable

如何在 Flutter 中为 StreamBuilder 的重建添加条件?

如何在Flutter Streambuilder中重新启动流?

如何在 Flutter streambuilder 的流中捕获异常

如何使用Mockito测试SOAP消息?

如何使用 Mockito 通过单元测试?

如何使用Mockito测试DAO方法?

如何在JUnit测试中使用Mockito?

如何使用mockito进行整数测试

如何使用JUnit或Mockito测试匿名方法?

如何使用Mockito测试给定代码

如何使用Mockito测试REST服务?

如何使用junit和mockito测试springjdbcTemplate