تستها را با 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();
گامهای بعدی
API Reference
امضای سریع ProviderContainer، Ref، AsyncValue و APIهای mutation را باز کنید.
Open API Reference