Păstrează testele deterministe cu containere explicite.
Cele mai multe scenarii de test se mapează direct pe API-urile ProviderContainer: read, invalidate, refresh, listen și override-uri per instanță de provider.
Test Strategy
Separă testele în teste pure de container și teste de integrare a widget-urilor.
Pure Dart
Folosește ProviderContainer direct pentru afirmațiile read/invalidate/refresh
Overrides
Suprascrie per instanță de provider cu overrideWith / overrideWithValue
Widget tests
Injctează containerul extern și disposează-l explicit
Tip
ProviderContainer.listen nu emite valoarea inițială decât dacă este specificat fireImmediately: true.
Comanda de test și lista de verificare
Rulează întreaga suită și verifică faptul că nu există scurgeri de timer în așteptare în scenariile 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.
Exemplu: override per argument
Provider-ele de tip familie sunt suprascrise pentru fiecare instanță creată de funcția ta de fabrică.
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();
Pașii următori
API Reference
Deschide semnături rapide pentru ProviderContainer, Ref, AsyncValue și API-urile mutation.
Open API Reference