Модульное тестирование с FakeAsyn c в Dart - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в модульном тестировании, и я пишу модульный тест, который использует пакет колчана для фальсификации асинхронного выполнения c. Функция, которую я использую, выглядит примерно так:

import 'dart:async';

import 'package:quiver/testing/async.dart';
import 'package:rxdart/rxdart.dart';
import 'package:test/test.dart' as tester;

testStream<MyType>(
  String message, {
  Iterable expecting,
  Future<void> Function(BehaviorSubject) action,
  Duration waitTime,
  int skip = 1,
}) {
  tester.test(message, () {
    final _stream = BehaviorSubject<MyType>();
    FakeAsync().run((async) async {
      final List<MyType> _results = <MyType>[];
      final _subscription = _stream.skip(skip).listen(_results.add);
      await action?.call(_stream);

      if (waitTime != null) async.elapse(waitTime);

      _subscription.cancel();
      if (expecting != null) {
        tester.expect(_results, expecting);
      }
    });
  });
}

Она хорошо работает на большинстве написанных мной тестов, но у меня возникают проблемы с конкретным примером c из-за недостатка знаний. В конкретном случае я передаю действие, которое добавляет отложенное будущее к потоку, примерно так:

testStream<int>(
  'Just a basic message',
  expecting: [1],
  action: (stream) async =>
       Future.delayed(Duration(days: 99), () => stream.add(1)),
  waitTime: Duration(seconds: 1),
);

Если я правильно понял, этот тест должен провалиться, однако, когда я его запускаю, он проходит. Что я здесь не так делаю ?

Затем, что я должен сделать, чтобы сначала выполнить действие, а затем истечь таймер после вызова действия, не ожидая его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...