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

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

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

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

หลายทีมเลือกเรนเดอร์เทมเพลตในเครื่อง (locally) และทำ snapshot HTML ซึ่งวิธีนี้ไม่ได้พิสูจน์ว่าข้อความที่ผู้อ่านได้รับจริง ๆ นั้นเป็นอย่างไร

เสียงรบกวน (noise) เกิดจากการใช้ mailbox ซ้ำกัน digest ของวันจันทร์จะวางอยู่ข้าง ๆ การส่งซ้ำของวันอังคาร สมาชิกในทีมอาจเผลอคลิกลิงก์จากข้อความที่ผิด ผลการทดสอบของคุณอาจขึ้นสีเขียว (ผ่าน) ในขณะที่ประวัติการตรวจสอบ (review trail) ของคุณกลับยุ่งเหยิงไปหมด

ใช้ลูปง่าย ๆ ดังนี้:

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

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

อย่าหยุดแค่คำว่า "ข้อความมาถึงแล้ว" การทดสอบที่ดีควรตรวจสอบรายละเอียดเหล่านี้:

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

หลีกเลี่ยงความผิดพลาด 3 ประการนี้:

  1. การใช้ mailbox เดียวกันร่วมกันระหว่าง CI, preview builds และ manual QA
  2. การมองว่า HTML ที่เรนเดอร์แล้วคือเป้าหมายสุดท้าย
  3. การลืมล้างข้อมูลบัญชีทดสอบที่ค้างอยู่ (stale test accounts)

รักษา checklist ของคุณให้สั้นและกระชับเพื่อให้สามารถรันได้บ่อย ๆ การแยกส่วน (isolation) จะช่วยให้ผลลัพธ์ของคุณอ่านง่ายและทำให้การแก้ไขปัญหาทำได้รวดเร็วขึ้น

Source: https://dev.to/ryanlee91/how-i-test-nodejs-digest-emails-without-shared-inbox-noise-54fh