การทดสอบ Digest Emails ของ Node.js โดยไม่ให้มี Noise ใน Inbox

Digest emails มักสร้างปัญหาเมื่อสภาพแวดล้อมแบบ preview ส่งสรุปข้อมูลไปยัง mailbox เดียวกันที่ใช้ร่วมกัน

คุณจะเริ่มติดตามไม่ได้ว่าข้อความไหนเป็นของ build ไหน คุณไม่สามารถตรวจสอบได้ว่าลิงก์ยกเลิกการรับข่าวสาร (unsubscribe link) เป็นเวอร์ชันปัจจุบันหรือไม่ และคุณอาจพลาดการตรวจสอบว่าเทมเพลตตรงกับกลุ่มผู้ใช้ (user segment) หรือไม่

ผมมองว่าการทำ QA สำหรับ digest email คือเส้นทางของผลิตภัณฑ์ (product path) โดยแอป JavaScript จะเป็นตัวกำหนดเวลา (schedule) ของเหตุการณ์ Node.js จะทำหน้าที่เรนเดอร์เนื้อหา และการตรวจสอบใน inbox จะเป็นการยืนยันประสบการณ์สุดท้ายที่ผู้ใช้จะได้รับ

หลายทีมมักทำผิดพลาดดังนี้:

  • พวกเขาใช้ mailbox เดียวกันซ้ำๆ สำหรับการรันหลายครั้ง Digest ของวันจันทร์จะวางปนอยู่กับ build ของวันอังคาร
  • พวกเขาพึ่งพาข้อมูล staging เก่าๆ ที่มีสตริงอีเมลแบบชั่วคราว
  • พวกเขาถือว่า HTML ที่เรนเดอร์แล้วคือจุดสิ้นสุดของการทดสอบ ทั้งที่ HTML snapshots อาจผ่านการทดสอบแม้ว่าข้อมูลจริงจะผิดพลาดก็ตาม

การทดสอบที่ดีต้องพิสูจน์ได้ว่าข้อความที่ผู้อ่านได้รับนั้นเป็นของจริง ให้ลองใช้ลูปง่ายๆ แบบนี้แทน:

  • ตัวกระตุ้นการทดสอบ (test trigger) จะสร้าง digest สำหรับกลุ่มผู้ใช้ (user segment) ที่ระบุ
  • Node.js จะสร้าง digest โดยใช้ข้อมูล staging จริง
  • การทดสอบจะใช้ inbox ที่แยกต่างหากสำหรับการรันครั้งนั้นๆ
  • ตัวรันการทดสอบ (runner) จะเปิด digest และตรวจสอบบล็อกสรุปข้อมูล
  • การทดสอบจะตรวจสอบว่าลิงก์ต่างๆ ชี้ไปยัง host และพารามิเตอร์แคมเปญที่ถูกต้อง

ให้มองว่าที่อยู่อีเมลคือโครงสร้างพื้นฐานแบบใช้แล้วทิ้ง (disposable infrastructure) โดยสร้างบัญชีอีเมลชั่วคราวสำหรับแต่ละสถานการณ์ (scenario) วิธีนี้จะช่วยป้องกันไม่ให้งานที่ไม่เสถียร (flaky job) เพียงงานเดียวไปทำให้งานถัดไปพังไปด้วย

การทดสอบ digest ที่มีประสิทธิภาพควรตรวจสอบรายละเอียดเหล่านี้:

  • งานที่กำหนดเวลาไว้ (scheduled job) จะเข้าคิวสร้าง digest หนึ่งฉบับสำหรับ segment ที่ถูกต้อง
  • หัวข้ออีเมล (subject line) แสดงวันที่ที่ถูกต้อง
  • preheader ตรงกับ feature flags ปัจจุบัน
  • ลิงก์ต่างๆ ใช้ host, UTM tags และ locale ที่ถูกต้อง
  • ลิงก์ยกเลิกการรับข่าวสารนำทางไปยังสภาพแวดล้อม (environment) ที่ถูกต้อง
  • ไม่มีการส่ง digest ซ้ำสำหรับผู้ใช้คนเดียวกัน

เลิกใช้ mailbox ร่วมกันระหว่าง CI, preview builds และ manual QA เสียที แม้ในช่วงแรกจะดูเหมือนมีประสิทธิภาพ แต่ในภายหลังมันจะทำให้เกิดผลลัพธ์ที่ผิดพลาด (false positives)

การแยกส่วน (Isolation) ช่วยให้การแก้ไขทำได้เร็วขึ้น เมื่อ digest ล้มเหลว คุณจะรู้ได้ทันทีว่าปัญหาอยู่ที่ตัว scheduler, ตัว renderer หรือที่ตัวข้อความเอง

ที่มา: https://dev.to/ryanlee91/how-i-test-nodejs-digest-emails-without-shared-inbox-noise-54fh