Testing 颤振:集团,测试流

Testing 颤振:集团,测试流,testing,stream,flutter,Testing,Stream,Flutter,测试集团模式对我来说并不那么清楚。因此,如果我有这两个流控制器: final _controller1 = StreamController(); final _controller2 = StreamController<bool>; Sink get controller1Add = _controller1.sink; Stream<bool> get controller2Out = _controller2.stream; 流应该是真的,我该怎么办 我试过这

测试集团模式对我来说并不那么清楚。因此,如果我有这两个流控制器:

final _controller1 = StreamController();
final _controller2 = StreamController<bool>;

Sink get controller1Add = _controller1.sink;
Stream<bool> get controller2Out = _controller2.stream;
流应该是真的,我该怎么办

我试过这样的方法:

  test("test", (){
    bloc.submit();
    expect(bloc.controller2Out, emitsAnyOf([true]));
  });

但是,当然,它不起作用。

我修改了您的代码以使用RxDart的行为主体,它似乎起作用了。您正在使用StreamController,但我收到错误消息,因为它没有value属性

final _controller1 = BehaviorSubject<String>();
final _controller2 = BehaviorSubject<bool>();

Sink get controller1Add => _controller1.sink;  
Stream<bool> get controller2Out => _controller2.stream;

  submit() {
    if (_controller1.value == null || _controller1.value.isEmpty) {
      print('Error');
      _controller2.sink.add(false);
      return;
    } else {
      print('OK');
      _controller2.sink.add(true);
    }
  }

如果移动
bloc.submit()
expect(…)
行下方?如果
submit()
是sync()`则不会向仅在之后订阅的订阅者发出任何事件。我认为您必须使测试异步并等待submit调用。
final _controller1 = BehaviorSubject<String>();
final _controller2 = BehaviorSubject<bool>();

Sink get controller1Add => _controller1.sink;  
Stream<bool> get controller2Out => _controller2.stream;

  submit() {
    if (_controller1.value == null || _controller1.value.isEmpty) {
      print('Error');
      _controller2.sink.add(false);
      return;
    } else {
      print('OK');
      _controller2.sink.add(true);
    }
  }
bloc.controller1Add.add('');
bloc.submit();
expect(bloc.controller2Out, emits(false));

bloc.controller1Add.add('test');
bloc.submit();
expect(bloc.controller2Out, emits(true));

bloc.controller1Add.add('');
bloc.submit();
expect(bloc.controller2Out, emits(false));