Mantén las pruebas deterministas con contenedores explícitos.
La mayoría de los escenarios de prueba se mapean directamente a las APIs de ProviderContainer: read, invalidate, refresh, listen y overrides por instancia de provider.
Test Strategy
Divide las pruebas en pruebas puras de contenedor y pruebas de integración de widgets.
Pure Dart
Usa ProviderContainer directamente para aserciones de read/invalidate/refresh
Overrides
Sobrescribe por instancia de provider con overrideWith / overrideWithValue
Widget tests
Inyecta el contenedor externo y dispónlo explícitamente
Tip
ProviderContainer.listen no emite el valor inicial a menos que se especifique fireImmediately: true.
Comando de prueba y lista de verificación
Ejecuta el conjunto completo y verifica que no haya fugas de temporizadores pendientes en escenarios 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.
Ejemplo: override por argumento
Los providers de tipo familia se sobrescriben por instancia creada a partir de tu función de fábrica.
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();
Siguientes pasos
API Reference
Abre firmas rápidas de ProviderContainer, Ref, AsyncValue y las APIs de mutations.
Open API Reference