สอนเขียน Automated Test ใน Express.js ด้วย Vitest สำหรับมือใหม่

7 นาที 17 views บันทึกเป็น PDF
สอนเขียน Automated Test ใน Express.js ด้วย Vitest สำหรับมือใหม่

เบื่อไหมที่ต้องคอยกดทดสอบ API เอง? มาเริ่มเขียน Automated Test (การทดสอบอัตโนมัติ) ด้วย Vitest เพื่อเช็กโค้ดให้ชัวร์ก่อนส่งงาน ช่วยลดบั๊กและเพิ่มความมั่นใจให้โปรแกรมเมอร์มือใหม่

ทำไมต้องเขียนโปรแกรมทดสอบ (Automated Testing)

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

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

การฝึกเขียน Test (การทดสอบ) ตั้งแต่ช่วงเริ่มต้นจะช่วยสร้างความมั่นใจให้คุณเป็นอย่างมาก คุณจะกล้าแก้โค้ดมากขึ้นเพราะรู้ว่าถ้าทำอะไรพัง ระบบจะแจ้งเตือนทันที นี่คือทักษะสำคัญที่บริษัทไอทีส่วนใหญ่ต้องการจากนักพัฒนาซอฟต์แวร์มืออาชีพ

เตรียมความพร้อมก่อนเริ่มเขียนโค้ด

ก่อนจะเริ่มเขียนโค้ดทดสอบ เราต้องเข้าใจแนวคิดพื้นฐานก่อน Unit Testing (การทดสอบโค้ดทีละส่วนย่อยๆ) คือการเช็กว่าฟังก์ชันชิ้นเล็กๆ ของเราทำงานถูกต้องไหม ส่วน Integration Testing (การทดสอบการทำงานร่วมกันของหลายส่วน) คือการเช็กว่าเมื่อเอาฟังก์ชันหลายตัวมาต่อกันแล้ว ระบบยังทำงานได้ปกติหรือไม่

ในการทดสอบเราจะมีคำศัพท์ที่ต้องเจอบ่อยๆ อย่าง Mocking (การจำลองฟังก์ชันปลอมมาแทนของจริง) เพื่อให้การทดสอบไม่ไปยุ่งกับฐานข้อมูลจริง และ Assertion (การยืนยันผลลัพธ์) คือการระบุว่าผลลัพธ์ที่ได้จากการทำงานต้องตรงกับที่เราคาดหวังไว้

เพื่อให้การทำงานเป็นระบบ เราจะใช้เครื่องมือที่ชื่อว่า Vitest (เครื่องมือสำหรับรันการทดสอบที่รวดเร็ว) ซึ่งเป็นที่นิยมมากในปัจจุบัน เพราะติดตั้งง่ายและทำงานร่วมกับ TypeScript (ภาษาโปรแกรมที่เพิ่มการระบุชนิดข้อมูลให้ JavaScript) ได้เป็นอย่างดี

ตั้งชื่อไฟล์และโครงสร้างการทดสอบ

การจัดการไฟล์ทดสอบให้เป็นระเบียบช่วยให้เราหาโค้ดเจอได้ง่ายขึ้น โดยปกติเราจะนิยมตั้งชื่อไฟล์โดยมีคำว่า .test.ts หรือ .spec.ts ต่อท้ายชื่อไฟล์เดิม เพื่อให้ Vitest รู้ว่าไฟล์นี้คือไฟล์สำหรับทดสอบนะ

โครงสร้างภายในไฟล์ทดสอบมักจะประกอบด้วย 4 ส่วนหลัก คือ describe (ใช้จัดกลุ่มการทดสอบ), it (ใช้ระบุเงื่อนไขการทดสอบ), expect (ใช้ตรวจสอบผลลัพธ์) และ Matchers (ตัวช่วยเปรียบเทียบค่าที่ได้กับค่าที่คาดหวัง) ซึ่งทำงานประสานกันเพื่อให้เราเห็นภาพชัดเจนว่าการทดสอบผ่านหรือไม่

ตัวอย่างการเขียนโครงสร้างทดสอบเบื้องต้น:

import { describe, it, expect } from "vitest";

// กลุ่มการทดสอบการคำนวณ
describe("ทดสอบฟังก์ชันคณิตศาสตร์", () => {
  // เงื่อนไขการทดสอบย่อย
  it("ควรบวกเลขได้ถูกต้อง", () => {
    expect(1 + 1).toBe(2);
  });
});

ในโค้ดด้านบน describe ทำหน้าที่ตั้งชื่อกลุ่มทดสอบ it อธิบายว่าเรากำลังทดสอบอะไร และ expect ตามด้วย toBe คือการยืนยันว่าผลลัพธ์ต้องเท่ากับ 2 หากรันโค้ดนี้ ผลลัพธ์ที่ได้จะเป็นข้อความแจ้งเตือนสีเขียวว่า "Passed" ซึ่งหมายความว่าการทดสอบผ่านฉลุย

ติดตั้ง Vitest และเริ่มเขียน Unit Test

ขั้นตอนแรกคือการติดตั้งเครื่องมือลงในโปรเจกต์ของคุณ ให้เปิด Terminal (หน้าจอพิมพ์คำสั่ง) ในโปรเจกต์ Express ของคุณ แล้วพิมพ์คำสั่งติดตั้งตาม Package Manager (ตัวจัดการแพ็กเกจ) ที่คุณใช้งานอยู่ เช่นถ้าใช้ npm ให้พิมพ์ npm install -D vitest ได้เลย

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

ตัวอย่างการเขียน Test สำหรับฟังก์ชันตรวจสอบอีเมล:

import { describe, it, expect } from "vitest";
import validateEmail from "../utils/email-validation";

describe("ทดสอบการตรวจสอบอีเมล", () => {
  it("ถ้าอีเมลถูกต้องต้องคืนค่า true", () => {
    const email = "test@example.com";
    expect(validateEmail(email)).toBeTruthy();
  });
});

ในโค้ดนี้เรานำเข้าฟังก์ชัน validateEmail มาทดสอบ โดยใช้ toBeTruthy (ตัวช่วยเช็กว่าเป็นจริงไหม) มายืนยันผลลัพธ์ เมื่อรันคำสั่ง npx vitest ใน Terminal คุณจะเห็นรายการทดสอบแสดงขึ้นมา หากทุกอย่างเรียบร้อยคุณจะเห็นข้อความยืนยันว่าการทดสอบผ่านทั้งหมด

จุดที่มือใหม่มักพลาดและวิธีแก้ไข

ข้อผิดพลาดที่พบบ่อยที่สุดคือการลืมติดตั้ง Dependencies (ไฟล์ที่จำเป็นต้องใช้) หรือการตั้งชื่อไฟล์ไม่ตรงตามรูปแบบ ทำให้ Vitest หาไฟล์ทดสอบไม่เจอ ให้ตรวจสอบเสมอว่าชื่อไฟล์ลงท้ายด้วย .test.ts และมีการ export ฟังก์ชันออกมาให้พร้อมใช้งาน

อีกจุดหนึ่งคือเรื่องของ Asynchronous (การทำงานที่ไม่รอให้จบทีละขั้นตอน) หากฟังก์ชันที่คุณทดสอบมีการดึงข้อมูลจากฐานข้อมูล คุณต้องใส่คำว่า async และ await หน้าฟังก์ชันทดสอบ ไม่อย่างนั้นโปรแกรมจะทดสอบเสร็จก่อนที่ข้อมูลจะถูกดึงมาถึง ทำให้ผลการทดสอบผิดพลาด

คำแนะนำคือให้เริ่มจากทดสอบฟังก์ชันเล็กๆ ที่ไม่ต้องติดต่อฐานข้อมูลก่อน เพื่อสร้างความคุ้นเคย แล้วค่อยขยับไปทดสอบ API จริงๆ การฝึกฝนทีละน้อยจะทำให้คุณไม่รู้สึกท้อและเข้าใจการทำงานของมันอย่างลึกซึ้งโดยไม่ต้องจำ

สรุป: การนำไปใช้ในชีวิตจริง

การเขียน Automated Tests ไม่ใช่เรื่องไกลตัว แต่มันคือการลงทุนเพื่อประหยัดเวลาในอนาคต สมมติว่าคุณกำลังทำโปรเจกต์แอปพลิเคชันจัดการรายการสิ่งที่ต้องทำ (To-Do List) การมีชุดการทดสอบสำหรับฟังก์ชัน "เพิ่มรายการ" จะช่วยให้คุณแก้ไขโค้ดส่วนอื่นได้อย่างมั่นใจโดยไม่ต้องกลัวว่าฟังก์ชันนี้จะพัง

เมื่อคุณเริ่มเขียนฟังก์ชันใหม่ๆ ให้ลองตั้งเป้าว่า "ฉันจะเขียน Test ให้ฟังก์ชันนี้ด้วย" แม้ช่วงแรกจะใช้เวลานานขึ้น แต่ในระยะยาวคุณจะพบว่าคุณไม่ต้องมานั่งไล่แก้บั๊ก (ข้อผิดพลาดในโค้ด) ที่เกิดจากการแก้ไขโค้ดเดิมซ้ำๆ อีกต่อไป

จงจำไว้ว่าโปรแกรมเมอร์ที่เก่งไม่ได้วัดกันที่เขียนโค้ดเร็ว แต่คือคนที่เขียนโค้ดที่ไว้ใจได้และดูแลรักษาง่าย การเริ่มหัดใช้ Vitest ตั้งแต่วันนี้ คือการวางรากฐานสำคัญในการเป็นนักพัฒนาซอฟต์แวร์ที่บริษัทไหนก็อยากร่วมงานด้วยครับ


ที่มา: How to Automate Your Tests in Express Using Vitest — freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

จัดการเซิร์ฟเวอร์ผ่าน VS Code ให้ง่ายขึ้นด้วย Easy SSH พร้อมฟีเจอร์โหลดไฟล์ผ่านคลิกเดียว

เบื่อไหมที่ต้องสลับหน้าจอไปมาเพื่อจัดการเซิร์ฟเวอร์? มาลองใช้ Easy SSH ปลั๊กอิน VS Code ที่ช่วยให้คุณรีโมทผ่าน Terminal ได้สะดวก แถมโหลดไฟล์ได้ง่ายแค่กด Ctrl+click

ที่มา: DEV Community

6 hours ago 11 นาที
3 views
วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

วิธีดึงข้อมูลราคาจาก Google Hotels ด้วย API สำหรับนักพัฒนา

อยากทำแอปท่องเที่ยวแต่ดึงข้อมูลราคาจาก Google Hotels ไม่ได้? มาดูวิธีใช้ Apify Actor ช่วยดึงข้อมูลแบบอัตโนมัติด้วย Python ง่ายๆ ไม่ต้องกลัวเว็บพัง

ที่มา: DEV Community

9 hours ago 8 นาที
5 views
วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

วิธีเช็กความพร้อมโปรเจกต์ก่อนปล่อยงานจริงด้วย ReleaseReady

เคยไหม? โค้ดรันได้ในเครื่องแต่พอปล่อยจริงกลับพัง! มาดูวิธีตรวจสอบความพร้อมของโปรเจกต์ก่อนอัปขึ้น GitHub ด้วยเครื่องมือ ReleaseReady กัน

ที่มา: DEV Community

13 hours ago 9 นาที
6 views