স্পষ্ট container দিয়ে tests-কে deterministic রাখুন।

বেশিরভাগ test scenario সরাসরি ProviderContainer API-তে map হয়: read, invalidate, refresh, listen এবং provider instance অনুযায়ী override।

Test Strategy

tests-কে pure container tests এবং widget integration tests-এ ভাগ করুন।

Pure Dart

read/invalidate/refresh assertions-এর জন্য সরাসরি ProviderContainer ব্যবহার করুন

Overrides

overrideWith / overrideWithValue দিয়ে provider instance অনুযায়ী override করুন

Widget tests

external container inject করুন এবং এটিকে স্পষ্টভাবে dispose করুন

Tip

fireImmediately: true নির্দিষ্ট না করলে ProviderContainer.listen প্রাথমিক value emit করে না.

Test command এবং checklist

পূর্ণ suite চালান এবং autoDispose scenario-তে কোনো pending timer leak নেই তা যাচাই করুন।

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.

উদাহরণ: argument অনুযায়ী override

family-like providers আপনার factory function থেকে তৈরি প্রতিটি instance-এর জন্য 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();
এই pattern টি miniriverpod রিপোজিটরির README এবং upstream tests অনুসরণ করে।
widget tests-এ external containers dispose করার আগে widgets unmount করা উচিত।
autoDispose delays এবং keepAlive behavior যাচাই করতে fake_async ব্যবহার করুন।

পরবর্তী পদক্ষেপ

API Reference

ProviderContainer, Ref, AsyncValue এবং mutation API-র quick signature খুলুন।

Open API Reference

Back to Overview

miniriverpod-এর সম্পূর্ণ documentation map-এ ফিরে যান।

Open Overview