👾Component Test With Cypress
Component testing is the way to identify the issues at the module level
Component Test คืออะไร

"Component test" หมายถึงการทดสอบส่วนย่อยของซอฟต์แวร์หรือระบบที่เรียกว่า "component" โดยตรง โดยไม่สนใจส่วนอื่น ๆ ของระบบ หรือ dependencies ภายนอก เป้าหมายของ component test คือการตรวจสอบความถูกต้องและประสิทธิภาพของส่วนย่อยที่กำลังถูกทดสอบ โดยอาศัยการทำงานของ component นั้น ๆ เท่านั้น.
หลักการของการเขียน Component Test
หลักการของ component test จะเน้นไปที่การ test แบบ UI Test หรือ ทดสอบพฤติกรรม(behaviour)ของมัน (คล้ายๆ automation test) แต่จะไม่ทดสอบในส่วนของ Logic ใน component ของ Component นั้นๆ เพื่อลดความซับซ้อน และ เวลาในการเขียน
Cypress
Cypress เป็นเครื่องมือที่ได้รับความนิยมสำหรับทำ end-to-end testing ในเว็บแอปพลิเคชัน (E2E testing) โดยเฉพาะในสถานการณ์ที่ต้องการทดสอบการทำงานของแอปพลิเคชันจริง ๆ บนเบราว์เซอร์. แต่ Cypress ก็สามารถใช้ทดสอบ Component แบบ isolated หรือแยกต่างหากได้ด้วย.

การใช้ Cypress เพื่อทำ Component test มีประโยชน์ในการทดสอบส่วนย่อยของแอปพลิเคชัน React โดยตรง โดยไม่ต้องทำการทดสอบทั้งระบบหรือการทดสอบ E2E ทั้งหมด.
นี้คือลักษณะการใช้ Cypress สำหรับ Component Test
การจัดการกับ DOM
Cypress มีความสามารถในการเข้าถึงและจัดการกับ DOM ของ Component อย่างง่าย.
สามารถใช้คำสั่งเช่น
cy.get()
,cy.contains()
, และcy.click()
เพื่อทำสิ่งต่าง ๆ บน DOM.
Real-Time Reloads
ในโหมด development, Cypress สามารถทำให้ test สามารถรันและเห็นผลการทดสอบทันทีที่โค้ดถูกแก้ไข.
ทำให้สามารถดูผลลัพธ์ทันทีที่ทำการแก้ไขและ refactor code.
Snapshot Testing
Cypress สามารถให้ snapshot testing ที่ช่วยเปรียบเทียบ Component กับ snapshot ที่ถูกบันทึกไว้.
การจำลองและ Stubbing
Cypress มีฟีเจอร์ที่ช่วยจำลองหรือ stub dependencies เพื่อจำลองการทำงานของภายนอก.
Interactive Mode
Cypress มีโหมด Interactive ที่ให้คุณทดสอบและเรียกใช้คำสั่งใน context ของเบราว์เซอร์ที่กำลังทำงาน.
ตัวอย่างของ Component Test โดยใช้ Cypress
// cypress/integration/counter_spec.js
describe('Counter Component Test', () => {
it('increments and decrements the counter', () => {
cy.visit('http://localhost:3000'); // Replace with the URL of your app
// Initial count
cy.get('p').should('have.text', 'Count: 0');
// Increment
cy.contains('Increment').click();
cy.get('p').should('have.text', 'Count: 1');
// Decrement
cy.contains('Decrement').click();
cy.get('p').should('have.text', 'Count: 0');
});
});
Last updated