Рецепты

Ожидание событий жизненного цикла

Замените фиксированные задержки наблюдателем, который завершается при выполнении смыслового условия.

v0.1.0-dev.1Средний уровеньusecase_forge_test

Ожидание событий жизненного цикла

Фиксированная задержка доказывает только то, что машина подождала. Она не называет событие, после которого проверка безопасна, и становится нестабильной при изменении планирования.

Назовите конечное условие

test/counter_test.dart
useCaseTest<CounterUseCase, CounterState>(
  'increment publishes and completes',
  build: CounterUseCase.new,
  act: (useCase) => useCase.add(const IncrementCommand()),
  waitFor: (useCase, observer) =>
      observer.waitForHistory(hasLength(1)),
  expectedHistory: () => <Object?>[
    isTerminalUseCaseExecutionEntry<IncrementCommand>(
      result: UseCaseExecutionResult.completed,
    ),
  ],
);

Сценарий продолжается, когда в конечной истории появляется одна запись. Он не предполагает длительность и не угадывает количество микрозадач обработчика.

Используйте наблюдатель для нескольких команд

test/orders_test.dart
final observer = UseCaseTestObserver<OrderState>(useCase);
addTearDown(() async {
  await useCase.close();
  await observer.cancel();
});

useCase
  ..add(const LoadOrder('a'))
  ..add(const LoadOrder('b'));

await observer.waitForHistory(hasLength(2));

Наблюдатель доступен только для чтения. Его отмена останавливает тестовую подписку, но не закрывает и не отменяет UseCase.

Управляйте временными политиками

Используйте TestUseCaseClock для Debounce, Throttle, Rate Limit и временных меток жизненного цикла. Продвиньте часы до границы политики, затем дождитесь смыслового события. Так моделируемое время отделяется от завершения и не зависит от скорости машины.

ARKTELOS

Инженерные системы для программного обеспечения, которое обязано выдерживать нагрузку.