【发布时间】:2021-06-27 04:38:58
【问题描述】:
我想测试我的 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;
}
用 mockito 模拟 ChatRepository。并尝试像这样进行测试:
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:方法'listen'在null上被调用。
如何存根该流?
【问题讨论】: