Giữ cho kiểm thử có tính xác định bằng các container rõ ràng.
Hầu hết các kịch bản kiểm thử ánh xạ trực tiếp tới các API của ProviderContainer: read, invalidate, refresh, listen và các override theo từng provider instance.
Test Strategy
Tách các kiểm thử thành kiểm thử container thuần túy và kiểm thử tích hợp widget.
Pure Dart
Dùng trực tiếp ProviderContainer cho các khẳng định read/invalidate/refresh
Overrides
Override từng provider instance bằng overrideWith / overrideWithValue
Widget tests
Chèn container bên ngoài và dispose nó một cách rõ ràng
Tip
ProviderContainer.listen không phát ra giá trị ban đầu trừ khi chỉ định fireImmediately: true.
Lệnh kiểm thử và danh sách kiểm tra
Chạy toàn bộ bộ kiểm thử và xác minh không có rò rỉ timer còn sót lại trong các kịch bản 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.
Ví dụ: override theo đối số
Các provider kiểu family được override theo từng instance do hàm factory của bạn tạo ra.
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();
Buoc tiep theo
API Reference
Mở các chữ ký nhanh cho ProviderContainer, Ref, AsyncValue và các API mutation.
Open API Reference