繁体   English   中英

如何测试 BLoC 监听 stream?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM