skipLink.label

Quest 40 - Mock Data Generator

Quest 40: Mock Data Generator

medium 25 minutes

🎯 Learning Objectives

  • ✅ สร้าง realistic mock data สำหรับ testing
  • ✅ ใช้ AI ช่วย generate data ที่ครอบคลุม edge cases
  • ✅ เข้าใจว่า mock data ที่ดีต้องมี patterns สมจริง
  • ✅ เรียนรู้วิธี generate data หลาย formats

📖 Concept: AI-Generated Mock Data

Mock data คือข้อมูลจำลองที่ใช้ทดสอบโค้ดโดยไม่ต้องใช้ database จริง — แต่ mock data ที่ไม่ realistic จะทดสอบได้ไม่ดี

AI ช่วย generate mock data ที่ realistic เพราะมันรู้ patterns จริงจาก training data — เช่น ชื่อคนไทย, ที่อยู่จริง, email formats ที่ถูกต้อง, หรือ product names ที่สมจริง

เหมือน Ninjutsu training dummy — ถ้า dummy ดูเหมือนจริง การฝึกจะมีประสิทธิภาพกว่า dummy ที่ดูปลอมๆ


⚙️ How It Works

กระบวนการ Generate Mock Data

1. SCHEMA — กำหนดโครงสร้างข้อมูลที่ต้องการ
↓
2. PATTERNS — AI สร้าง realistic patterns
↓
3. GENERATE — สร้างข้อมูลตาม schema
↓
4. VARIATION — เพิ่ม edge cases และ variations
↓
5. VERIFY — ตรวจสอบว่าข้อมูลสมจริงและครบถ้วน

Schema Definition

const userSchema = {
name: { type: 'string', pattern: 'name' },
email: { type: 'string', pattern: 'email' },
age: { type: 'number', min: 18, max: 80 },
phone: { type: 'string', pattern: 'phone-thai' },
address: { type: 'object', properties: {
street: { type: 'string', pattern: 'address' },
city: { type: 'string', pattern: 'city-thai' }
}}
};

💡 Example: Mock Data Generator

function generateMockUser(overrides = {}) {
const firstNames = ['สมชาย', 'สมหญิง', 'วิชัย', 'วิภา', 'ประเสริฐ', 'สุดา'];
const lastNames = ['ใจดี', 'สุขสวัสดิ์', 'มั่นคง', 'สุขสันต์', 'เจริญ'];
const cities = ['กรุงเทพฯ', 'เชียงใหม่', 'ภูเก็ต', 'ขอนแก่น', 'สงขลา'];
const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];
const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
return {
name: `${firstName} ${lastName}`,
email: `${firstName.toLowerCase()}@example.com`,
age: Math.floor(Math.random() * 62) + 18,
phone: `0${Math.floor(Math.random() * 900000000) + 100000000}`,
address: {
street: `${Math.floor(Math.random() * 999) + 1} ถนนสุขุมวิท`,
city: cities[Math.floor(Math.random() * cities.length)]
},
...overrides
};
}
// สร้าง users หลายตัว
const users = Array.from({ length: 10 }, () => generateMockUser());
// เพิ่ม edge cases
const edgeCases = [
generateMockUser({ age: 0 }), // edge: minimum age
generateMockUser({ age: 150 }), // edge: impossible age
generateMockUser({ name: '' }), // edge: empty name
generateMockUser({ email: 'invalid' }) // edge: invalid email
];

⚠️ Common Mistakes

Mistake 1: ใช้ hardcoded data ตลอด

“ใช้ ‘John Doe’ ทุกครั้งก็ได้” → Hardcoded data ทำให้ tests ไม่ cover variation — ใช้ random generation

Mistake 2: ไม่ realistic พอ

user.email = 'test@test.com' ทุกตัว → Real users มีชื่อซ้ำกันได้ แต่ emails ต้อง unique — ต้อง generate ให้สมจริง

Mistake 3: ไม่ generate edge cases

“happy path data พอแล้ว” → Edge cases ใน mock data ช่วย discover bugs — เพิ่ม boundary values เสมอ

Mistake 4: ไม่ configurable

“hardcode schema ไว้เลย” → Mock data generator ควร configurable — บาง test ต้องการ data รูปแบบต่างกัน


📝 Knowledge Check

📝 Knowledge Check

Q1:ทำไม mock data จึงต้อง realistic?

Q2:Hardcoded mock data มีข้อเสียอะไร?

Q3:Edge cases ที่ควรเพิ่มใน mock data มีอะไรบ้าง?


🏋️ Quest: Mock Data Generator

พร้อมแล้วสร้าง mock data! ใช้ AI ช่วย generate realistic test data

  1. Download ไฟล์เริ่มต้นของ quest:

    Terminal window
    npx bluebeltdojo download quest-40-mock-data-generator
    cd quest-40-mock-data-generator
  2. เปิด problem.js ใน editor ของคุณพร้อมความช่วยเหลือของ AI

  3. Implement solve() ที่ generate realistic mock data

  4. ตรวจสอบ solution ของคุณ:

    Terminal window
    node test.js
  5. เมื่อ tests ผ่านทั้งหมด ส่งคำตอบ:

    Terminal window
    npx bluebeltdojo submit

💡 Tip: ลองนึกถึง data ที่คุณใช้ test บ่อยๆ — มัน realistic พอไหม?


คำใบ้

  • ดู schema ใน problem.js สำหรับ fields ที่ต้อง generate
  • เพิ่ม realistic variations — ไม่ใช่แค่ random strings
  • ทดสอบกับ edge cases ด้วย — empty, boundary, invalid