स्पष्ट containers के साथ tests को deterministic रखें।
अधिकांश test scenarios सीधे ProviderContainer APIs पर map होते हैं: read, invalidate, refresh, listen, और provider instance के आधार पर overrides।
Test Strategy
tests को pure container tests और widget integration tests में विभाजित करें।
Pure Dart
read/invalidate/refresh assertions के लिए सीधे ProviderContainer का उपयोग करें
Overrides
overrideWith / overrideWithValue के साथ provider instance के आधार पर override करें
Widget tests
external container inject करें और उसे स्पष्ट रूप से dispose करें
Tip
ProviderContainer.listen प्रारंभिक value emit नहीं करता जब तक fireImmediately: true निर्दिष्ट न हो।
Test command और checklist
पूरे suite को चलाएँ और verify करें कि autoDispose scenarios में कोई pending timer leak नहीं है।
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.
उदाहरण: argument के आधार पर override
family-like providers आपकी factory function से बनी हर instance के लिए 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, और mutation APIs के quick signatures खोलें।
Open API Reference