รู้จักกับแนวคิดของ Testing Library

ไทย

🐙 รู้จักกับแนวคิดของ Testing Library

Testing Library คืออะไร?
Simple and complete testing utilities that encourage good testing practices

Testing Library คือ ชุดเครื่องมือในการเขียนเทสที่ครบครัน และจะช่วยให้เรามีแนวทางการเขียนเทสที่ดีขึ้น นั่นเอง

🤔 The Problem

Photo by Olav Ahrens Røtne

ปัญหาหลักที่ทางเว็บ Official ของ Testing Library ได้ยกมาเกี่ยวกับการเขียนเทสสำหรับ UI Components นั้นมีด้วยกัน 2 หัวข้อดังนี้ครับ

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

มีบล็อกของ Kent​ เขียนเกี่ยวกับเรื่องนี้โดยเฉพาะครับ หากใครสนใจสามารถไปอ่านต่อได้ในหัวข้อ Testing Implementation Details

  • เราอยากจะเขียนเทสที่ง่ายต่อการบำรุงรักษา(maintainable) และในการเปลี่ยนแปลงที่เกิดจาก Implementation (เช่น การเปลี่ยนชื่อตัวแปรด้านใน Component นั้นจะไม่ส่งผลกระทบต่อความสามารถ(functionality)) จะไม่ส่งผลให้เทสนั้นพังและทำให้เราและทีมทำงานได้ช้าลง

ถ้ายกตัวอย่างที่เห็นภาพได้ชัดเจน เช่น เรามี Component ที่จะแสดงผลผู้ใช้งานและเก็บ state ที่ชื่อว่า users เพื่อที่จะแสดงผล Array ของ users ออกมาบนหน้าจอ

หากวันใดวันหนึ่งเราเกิดเปลี่ยนชื่อตัวแปรที่เก็บ state ใน Component จาก users เป็น userList แต่ความสามารถยังคงเหมือนเดิมคือ การแสดงผลของ user บนหน้าจอ จะไม่ส่งผลให้เทสเคสที่เขียนนั้นพัง ซึ่งถ้าเทสของเราพัง เราอาจต้องย้อนกลับไปดูว่าเราเขียนเทสที่ผูกติดอยู่กับ Implementation details เกินไปหรือเปล่า

และก็มีบล็อกของท่าน Kent ที่เขียนในหัวข้อ Write tests. Not too many. Mostly integration อีกเช่นกัน เผื่อใครสนใจไปตามอ่านได้ครับ อาจช่วยให้เห็นภาพได้ชัดเจนยิ่งขึ้น

💡 The Solution

Photo by Olav Ahrens Røtne

สำหรับแนวทางในการแก้ปัญหานั้นก็จะหลีกหนีไม่ได้สำหรับการใช้งาน Testing Library ของเขาครับ โดยที่จุดขายทั้งหมดจะมาแก้ปัญหาที่ได้กล่าวมาข้างต้น ไม่ว่าจะเป็นการมีแนวทางปฎิบัติที่ดีสำหรับการเขียนเทสโดยที่ไม่ Too many implementaion details พร้อมทั้งมี API interface ที่ออกแบบมาโดยที่คำนึงถึงการค้นหาสิ่งที่ผู้ใช้งานจะเห็นบนหน้าจอจริง และด้วยสองสิ่งเหล่านี้จะทำให้เรามี Test practice ที่ดีและเขียนเทสได้อย่างมั่นใจมากยิ่งขึ้นนั่นเอง

🧐 Testing Library สามารถใช้กับ Framework/Library ไหนได้บ้าง?

ถ้าไปดูใน Official Website เราจะเห็นว่าใช้เทสได้เกือบทุก Frontend Frameworks/Library เลยใช่ไหมครับ ไม่ว่าตัวที่ได้รับความนิยมทั้งหลายไม่ว่าจะเป็น React, Vue, Angular, Preact, Cypress

ส่วนนี้ผมคิดว่าเราอาจจะเห็นภาพได้ชัดเจนยิ่งขึ้น เพราะไม่ว่าเราจะใช้ Tools, Frameworks, Library หรือตัวไหน ๆ สุดท้ายแล้วสิ่งที่ User เห็นก็จะอยู่บนหน้าเว็บ(DOM) เสมอ โดยที่เราไม่ต้องสนใจว่าเบื้องหลังของแต่ละเฟรมเวิร์คมีลับลมคมในอะไรอยู่ หรือมี Implementation details อย่างไรในแต่ละเฟริมเวิร์ค

ทั้งนี้หากใครสนใจลองเล่นเจ้า Testing Library เขาก็มีตัวอย่างโค้ดก็สามารถเข้าไปดูได้ที่หน้า Examples ได้ครับ ถ้าหากใครอยากจะลองเขียนใช้เลยโดยที่ไม่ต้องติดตั้งอะไรเพิ่มเติมก็สามารถลองเล่นได้ใน CodeSandbox Example ได้ทันที ขอเพียงแค่คุณมี Browser อย่างเดียวก็เกินพอ แต่ติดอย่างเดียวพวกตัวอย่างอาจมีแค่ React เป็นส่วนมาก ถ้าใครสนใจอยากจะลองใช้กับพวกโปรเจคที่ไม่ใช่ React based ก็สามารถดูเพิ่มเติมได้ที่ dom-testing-library-with-anything ที่สอนอยู่ในคอร์ส Testing JavaScript ครับ อาจต้องซื้อถ้าอยากดูพวกวีดีโอเนื้อหาแต่ repository ที่ใช้เป็นตัวอย่างเป็น public อยู่แล้วครับ สำหรับสายฟรีอย่างผมก็แอบไปส่องมาเหมือนกัน 👀

สรุป
Testing Library นั้นเป็นเครื่องมือที่น่าสนใจมากสำหรับการเขียนเทสสำหรับ UI ที่ทำให้เราเขียนเทสโดยให้เรามี Testing practice ที่ดี โดยคำนึงถึงสิ่งที่ผู้ใช้จะเห็นอยู่บนหน้าจอเป็นหลัก อีกทั้งยังสามารถนำไปปรับใช้ได้หลากหลาย Modern Frontend Frameworks/Library อย่าง React, Vue, Angular, Svelte หรือติดตั้งเป็นส่วนเสริมใน Cypress ก็ได้เช่นกัน

ก่อนหน้านี้ที่ผมใช้นั้นเจ้า Library นั้นยังไม่ได้ถูกติดตั้งโดย default ตอนสร้างโปรเจค React ด้วยซ้ำ แต่ตอนนี้มันกลายเป็น default ไปแล้ว แสดงว่าได้เจ้า Library ตัวนี้ได้พิสูจน์ตัวเอง รวมถึงแนวทางการแก้ปัญหาที่ Library นี้เสนอให้ก็เป็นที่ยอมรับโดยทั่วไปแล้วครับ

References

Write tests. Not too many. Mostly integration. (kentcdodds.com)

Introduction | Testing Library (testing-library.com)

Testing Implementation Details (kentcdodds.com)

Related Content

  • ทั้งหมด
  • Others
  • Jobs
  • Tech innovation
  • Events
  • Services & Products
  • Joint ventures
  • Leadership
  • User experience
  • Technology
  • Strategy
  • Product
  • Lifestyle
  • Data science
  • Careers
  • Finance
  • Blockchain
[#1 Journal club] ส่อง Recommendation System ของ Pinterest

การแชร์ความรู้เป็นปัจจัยสำคัญอย่างหนึ่งในการสร้างทีมเทคโนโลยีในปัจจุบันและเป็นการช่วยทำให้ความรู้ของคนในทีมนั้นเท่ากันและอัพเดตอยู่เสมออีกทั้งยังช่วยเพิ่มประสิทธิภาพการทำงาน...

August 17, 2022
ส่องสไตล์การทำงานสายเทคโนโลยีเพื่อพิชิตงานในฝันให้ได้อย่างใจหวัง

ช่วงไม่กี่ปีมานี้จะเห็นได้ชัดเจนว่าบริษัทเทคโนโลยีทั่วโลกต่างมีอัตราการเติบโตในหลาย ๆ ด้านแบบก้าวกระโดด ไม่ว่าจะเป็นผลประกอบการที่ได้จากผลิตภัณฑ์ หรือ การให้บริการ ผลตอบแทนให้แก่นักลงทุน...

June 24, 2022

Your consent required

If you want to message us, please give your consent to SCB TechX to collect, use, and/or disclose your personal data.

| The withdrawal of consent

If you want to withdraw your consent to the collection, use, and/or disclosure of your personal data, please send us your request.

Message sent

We have receive your message and We will get back to you shortly.