Ohranite teste deterministične z eksplicitnimi vsebniki.
Večina testnih scenarijev se neposredno preslika na API-je ProviderContainerja: read, invalidate, refresh, listen in preglasitve za vsako instanco providerja.
Test Strategy
Teste razdelite na čiste container teste in integracijske teste gradnikov.
Pure Dart
Za trditve read/invalidate/refresh uporabljajte neposredno ProviderContainer
Overrides
Prepišite vsako instanco providerja z overrideWith / overrideWithValue
Widget tests
Vstavite zunanji vsebnik in ga izrecno disposeajte
Tip
ProviderContainer.listen ne odda začetne vrednosti, razen če je podan fireImmediately: true.
Ukaz za testiranje in kontrolni seznam
Zaženite celoten nabor in preverite, da v scenarijih autoDispose ni preostalih puščanj časovnikov.
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.
Primer: preglasitev po argumentu
Providerji tipa family se preglasijo za vsako instanco, ustvarjeno z vašo tovarniško funkcijo.
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();
Naslednji koraki
API Reference
Odprite hitre podpise za ProviderContainer, Ref, AsyncValue in API-je za mutacije.
Open API Reference