स्पष्ट 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();
यह पैटर्न miniriverpod repository में README और upstream tests का अनुसरण करता है।
widget tests को external containers dispose करने से पहले widgets को unmount करना चाहिए।
autoDispose delays और keepAlive behavior की पुष्टि के लिए fake_async का उपयोग करें।

अगले कदम

API Reference

ProviderContainer, Ref, AsyncValue, और mutation APIs के quick signatures खोलें।

Open API Reference

Back to Overview

miniriverpod के पूर्ण documentation map पर वापस जाएँ।

Open Overview