Робіце тэсты дэтэрмінаванымі з яўнымі кантэйнерамі.

Большасць сцэнарыяў тэставання непасрэдна адпавядаюць API ProviderContainer: read, invalidate, refresh, listen і overrides для кожнага экзэмпляра provider.

Test Strategy

Раздзяліце тэсты на чыстыя кантэйнерныя тэсты і інтэграцыйныя тэсты widgets.

Pure Dart

Выкарыстоўвайце ProviderContainer непасрэдна для праверак read/invalidate/refresh

Overrides

Пераазначайце па экзэмпляры provider з overrideWith / overrideWithValue

Widget tests

Укараняйце знешні кантэйнер і яўна вызваляйце яго

Tip

ProviderContainer.listen не выдае пачатковую вартасць, калі не зададзена fireImmediately: true.

Каманда тэставання і кантрольны спіс

Запусціце ўвесь набор і пераканайцеся, што ў сцэнарыях autoDispose няма ўцечак чаканых таймераў.

Command

Checklist

- Dispose externally injected ProviderContainer in tearDown.
- Use fireImmediately: true when your listener assertions need initial state.
- For autoDispose tests, advance fake time beyond autoDisposeDelay.

Прыклад: override па аргуменце

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

class ProductById extends Provider<Product> {
  ProductById(this.id) : super.args((id,));
  final String id;

  @override
  Product build(ref) {
    final repo = ref.watch(productRepoProvider);
    return repo.fetch(id);
  }
}

final container = ProviderContainer(
  overrides: [
    productByIdProvider('a').overrideWithValue(const Product(id: 'a', name: 'stub')),
  ],
);

// assert and cleanup
container.dispose();
Гэты шаблон паўтарае README і upstream-тэсты ў рэпазіторыі miniriverpod.
Тэсты widgets павінны дэмантаваць widgets перад вызваленнем знешніх кантэйнераў.
Выкарыстоўвайце fake_async, каб праверыць затрымкі autoDispose і паводзіны keepAlive.

Наступныя крокі

API Reference

Адкрыйце хуткія сігнатуры для ProviderContainer, Ref, AsyncValue і API mutations.

Open API Reference

Back to Overview

Вярніцеся да поўнай карты дакументацыі miniriverpod.

Open Overview