تست‌ها را با containerهای صریح، قطعی نگه دارید.

بیشتر سناریوهای تست مستقیماً به APIهای ProviderContainer نگاشت می‌شوند: read، invalidate، refresh، listen و overrideها برای هر instance از provider.

Test Strategy

تست‌ها را به تست‌های خالص container و تست‌های یکپارچه‌سازی widget تقسیم کنید.

Pure Dart

برای assertions read/invalidate/refresh مستقیماً از ProviderContainer استفاده کنید

Overrides

برای هر instance از provider با overrideWith / overrideWithValue override کنید

Widget tests

container خارجی را تزریق کنید و آن را صریحاً dispose کنید

Tip

ProviderContainer.listen مقدار اولیه را emit نمی‌کند مگر اینکه fireImmediately: true مشخص شده باشد.

دستور تست و چک‌لیست

کل مجموعه را اجرا کنید و بررسی کنید که در سناریوهای autoDispose هیچ نشت timer در انتظار وجود ندارد.

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 بر اساس آرگومان

providerهای شبیه خانواده برای هر instance که توسط تابع factory شما ساخته می‌شود، 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 را دنبال می‌کند.
تست‌های widget باید پیش از dispose کردن containerهای خارجی، widgetها را unmount کنند.
برای اعتبارسنجی تأخیرهای autoDispose و رفتار keepAlive از fake_async استفاده کنید.

گام‌های بعدی

API Reference

امضای سریع ProviderContainer، Ref، AsyncValue و APIهای mutation را باز کنید.

Open API Reference

Back to Overview

به نقشهٔ کامل مستندات miniriverpod برگردید.

Open Overview