Флаттер: BLoC, тестирование потоков - PullRequest
0 голосов
/ 19 ноября 2018

Тестирование шаблона блока мне не так понятно. Итак, если у меня есть эти 2 потоковых контроллера:

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

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

и я хочу проверить это из этой функции:

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

_controller2.stream должен иметь значение true, как мне поступить?

Я пробовал что-то вроде:

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

но, конечно, это не сработало.

1 Ответ

0 голосов
/ 09 декабря 2018

Я изменил ваш код для использования BehaviorSubject 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.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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...