คงความ deterministic ของ tests ด้วย containers ที่ระบุชัดเจน.

สถานการณ์ทดสอบส่วนใหญ่แมปตรงไปยัง ProviderContainer APIs: read, invalidate, refresh, listen และ overrides ตาม provider instance.

Test Strategy

แยก tests ออกเป็น container tests ล้วน ๆ และ widget integration tests.

Pure Dart

ใช้ ProviderContainer โดยตรงสำหรับ assertions read/invalidate/refresh

Overrides

override ตาม provider instance ด้วย overrideWith / overrideWithValue

Widget tests

inject external container และ dispose มันอย่างชัดเจน

Tip

ProviderContainer.listen จะไม่ emit ค่าเริ่มต้นเว้นแต่ระบุ fireImmediately: true.

คำสั่งทดสอบและ checklist

รัน suite ทั้งหมดและตรวจสอบว่าไม่มี timer leak ที่ค้างอยู่ในสถานการณ์ 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 ตาม argument

providers แบบ family จะถูก override แยกตาม instance ที่สร้างจากฟังก์ชัน factory ของคุณ.

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();
รูปแบบนี้สอดคล้องกับ README และ upstream tests ใน repository ของ miniriverpod.
widget tests ควรถอด widget ออกก่อน dispose containers ภายนอก.
ใช้ fake_async เพื่อตรวจสอบการหน่วงเวลา autoDispose และพฤติกรรม keepAlive.

ขั้นตอนถัดไป

API Reference

เปิดดู signature แบบย่อสำหรับ ProviderContainer, Ref, AsyncValue และ mutation APIs.

Open API Reference

Back to Overview

กลับไปที่แผนผังเอกสารฉบับเต็มของ miniriverpod.

Open Overview