Робіть тести детермінованими з явними контейнерами.
Більшість сценаріїв тестування безпосередньо відповідають API ProviderContainer: read, invalidate, refresh, listen і overrides для кожного екземпляра provider.
Test Strategy
Розділіть тести на чисті контейнерні тести та інтеграційні тести віджетів.
Pure Dart
Використовуйте ProviderContainer безпосередньо для перевірок read/invalidate/refresh
Overrides
Перевизначайте по екземпляру provider за допомогою overrideWith / overrideWithValue
Widget tests
Впроваджуйте зовнішній контейнер і явно звільняйте його
Tip
ProviderContainer.listen не видає початкове значення, якщо не вказано fireImmediately: true.
Команда тестування і чеклист
Запустіть весь набір і переконайтеся, що в сценаріях 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.
Приклад: 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 і API mutations.
Open API Reference