react ❤️ | https://unsplash.com/photos/1HCb2gPk3ik

แนวการทดสอบ React components จาก React Testing Recipes: chapter 3

Supawit R
odds.team
Published in
2 min readJun 1, 2021

--

มาถึงกันในบทสุดท้ายของ React Testing Recipes ก่อนอื่นขอบคุณ document ที่ได้จาก https://reactjs.org/docs/testing-recipes.html

สำหรับตอนก่อนหน้า

Snapshot Testing

เฟรมเวิร์กอย่าง Jest สามารถทำการ “snapshot” ด้วยฟังก์ชัน toMatchSnapshot / toMatchInlineSnapshot ทำให้เราบันทึกการ render ของ component output และทำให้มั่นใจได้ว่าเราจะถูกครั้งที่เราแก้ไขโค้ดมันจะไม่ไปกระทบการ render ของ component ที่ไม่เกี่ยวข้อง

ตัวอย่างจะเป็นการ render component และฟอแมตซ์ผลลัพธ์ออกมาเป็น HTML ด้วย package ที่ชื่อว่า pretty แล้วค่อย save ออกมาเป็น inline snapshot

โดยหลักการแล้วมันดีกว่าที่จะใช้ assertion แบบระบุไปตรง ๆ เลย ดีกว่าจะใช้ snapshot เพรราะ test ประเภท snapshot มันจะเช็คถึงระดับ implementation details ทำให้โอกาสที่ test พังง่ายกกว่า และทีม can get desensitized to snapshot breakages การเลือกที่จะ mock ค่า child component บางตัว ก็ช่วยให้เราลดขนาดของ snapshot file และทำให้มันอ่านง่ายด้วย

ในมุมมองของผม ผมมักจะเขียน snapshot test น้อย ๆ ใช้กับ component ส่วนที่มีโอกาสเปลี่ยนแบบนาน ๆ ที และต้องการ strict ในผลลัพธ์ในมุมมองคือพวก core component ส่วนเล็ก ๆ ที่มาจาก design system เช่น button, label เป็นต้น

Multiple Renderers

บางครั้งเราอาจจำเป็นต้อง test component ที่ใช้ multiple renderers แต่กรณีนี้แทบไม่ค่อยเห็น

ตัวอย่างของการทำ multiple renderers เช่นเรารัน snapshot test กับ component ตัวนึง โดยใช้ react-test-renderer ที่ภายในมีการใช้งาน ReactDOM.render ด้านใน child component เพื่อ render เนื้อหา ซึ่งกรณีนี้เราอาจจะต้องใช้ฟังก์ชัน act เพื่อให้มั่นใจว่าผลลัพธ์ที่ได้จากการ render ของ component render ทำการอัปเดตแล้ว โดยเราจะทำการครอบ 2 ชั้นแบบนี้

น่าจะพอให้เห็นภาพคร่าว ๆ ว่า react มีวิธีการทดสอบแบบไหนกันบ้าง ที่เหลือก็ต้องไปฝึกฝนต่อว่าส่วนไหนต้อง test แบบไหนกันละครับ หรือใครอยากต่อยอดก็สามารถศึกษา https://testing-library.com/docs/react-testing-library/intro/ ต่อได้ โดย library ก็จะเอา concept การ test ที่เราเล่ากันมาให้เขียนได้ง่ายขึ้น

อยากย้ำกับทุกคนว่าอย่าพึ่งไปคิดว่าเราจะต้องเขียน test เท่าไร test coverage กี่เปอร์เซ็นต์ แต่ต้องถามว่าเราเขียน test ไปทำไมก่อน

Special Thanks

ขอขอบคุณ “สำนักงานส่งเสริมเศรษฐกิจดิจิทัล (depa)” และคณาจารย์ “คณะเทคโนโลยีสารสนเทศ มจธ. (SIT)” ที่ให้การสนับสนุน “ทุนเพชรพระจอมเกล้าเพื่อพัฒนาเทคโนโลยีและนวัตกรรมดิจิทัล (KMUTT-depa)” ซึ่งเป็นทุนที่มอบความรู้ ทักษะและโอกาสดีในการฝึกฝนพัฒนาทักษะที่มีอยู่ให้เฉียบคมมากยิ่งขึ้นครับ ❤

--

--

Supawit R
odds.team

a developer who love to learn, read, and sleep.