[英]How to test BLoC listening stream?
我想测试我的 chat_bloc 文件,它监听了几个流:
class ChatBloc extends Bloc<ChatEvent, ChatState> {
final ChatRepository chatRepository;
ChatBloc(
{@required this.chatRepository,})
: super(ChatLoading()) {
this.add(ChatScreenStarted());
_chatSubscription = chatRepository.message.listen((message) { // error points here
// do smth
});
}
StreamSubscription<Message> _chatSubscription;
// mapEventToState and others
}
ChatRepository 中的消息获取器:
@override
Stream<Message> get message async* {
yield* chatDataSource.messages;
}
Mocking ChatRepository 与 mockito。 并尝试像这样测试:
class MockChatRepository extends Mock implements ChatRepository {}
void main() {
MockChatsRepository mockChatsRepository;
ChatBloc chatBloc;
setUp(() {
mockChatRepository = MockChatRepository();
chatBloc = ChatBloc(
chatRepository: mockChatRepository,
);
});
blocTest(
'sould ...',
build: () => chatBloc,
act: (ChatBloc chatBloc) {
when(mockChatRepository.message)
.thenReturn(Stream<Message>.fromIterable([tMessageModel]));
chatBloc.add(ChatScreenStarted());
},
expect: () => [],
);
}
给出错误NoSuchMethodError:在 null 上调用了方法“listen”。
如何存根 stream?
我应该在实例化 bloc 之前这样做:
when(mockChatRepository.message).thenAnswer((_) {
return Stream.fromIterable([tMessage]);
});
这将创建已经在监听 stream 的 bloc。
PS谢谢Aleksander“TAZ”Krinzhovnik
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.