จาก Part ที่ 1 นั้นเริ่มด้วยการทดสอบระบบ web ด้วย library ชื่อว่า Enzyme
ซึ่งจะจำลองการทำงานของ React component ขึ้นมาให้
เราได้ทำการติดตั้ง configuration ตลอดจนเริ่มเขียนชุดการทดสอบแรกไปแล้ว
ใน Part 2 นี้จะเริ่มพัฒนาระบบเครื่องคิดเลขกัน
โดยจะพยายามเริ่มด้วยชุดการทดสอบ
หรือคิดก่อนว่าเราจะทำอะไร และ ต้องได้อะไรออกมา
แน่นอนว่ายังคงใช้ Enzyme นั่นเอง
มาเริ่มกันดีกว่า
สิ่งที่ต้องคิดและออกแบบก่อนคือ เครื่องคิดเลขของเราเป็นอย่างไร ?
ทั้ง feature และหน้าตาของระบบ เพื่อความง่ายของระบบเลยให้มีความสามารถดังนี้- มีช่อง input ให้ใส่ 2 ตัว
- สามารถเลือกบวก ลบ คูณและหารได้
- แสดงผลของการทำงาน
ขั้นตอนที่ 1 ในหน้าจอการทำงานของเครื่องคิดเลข ต้องมีอะไรบ้าง ?
- ต้องมี form 1 form
- ต้องมีช่องให้กรอกตัวเลข 2 ช่อง
- ต้องมีปุ่มให้กดคือ บวก ลบ คูณหาร นั่นคือ 4 ปุ่ม
- ต้องมีที่ว่างสำหรับการแสดงผลลัพธ์
ขั้นตอนที่ 2 เมื่อการแสดงผลเรามั่นใจแล้ว มาถึงการทำงานหลักกัน
ซึ่งมีเรื่องหลัก ๆ ให้คิดคือจะทดสอบอะไรดี ในตอนนี้มี 2 ส่วนงานคือ ส่วนที่ 1 การคำนวณบวก ลบ คูณและหาร นั่นคือ Unit test ปกติ ส่วนที่ 2 การทดสอบกรอกข้อมูลผ่าน form จากนั้นเลือกการคำนวณและแสดงผลด้วย Enzymeในตอนนี้เรากำลังฝึกเชียนชุดการทดสอบ ดังนั้นเขียนมันไปทั้งคู่เลยดีกว่าเริ่มจากการเขียน Unit test ของการบวก ลบ คูณและหารกันก่อน จะเขียนบวกให้ดูกันก่อน [gist id="14c1928deed2f1adb94bcad4a834d7f2" file="test_02.js"] ผลที่ได้จากการทดสอบคือ พังสิครับ !! เพราะว่า function plus() มันยังไม่มี ดังนั้นก็ทำการสร้างมันขึ้นมาและเขียน logic การทำงานดังนี้ [gist id="14c1928deed2f1adb94bcad4a834d7f2" file="2.js"] ในตอนนี้เราก็จะมีชุดการทดสอบ 2 ตัวแล้วนะ
สิ่งที่ทุกคนต้องทำเพิ่มคือ ลบ คูณ หาร นะครับ ให้ระวังตรงหารด้วยนะ เพราะว่า หารด้วยคูณไม่ได้นะครับ !! ลงมือทำกันได้เลยนะ
เมื่อเรียบร้อยแล้ว เรามาทดสอบการทำงานของ Calculator component ด้วย Enzyme กัน
เป็นการทดสอบมุมมองของคนใช้งานนั่นคือ- ทำการกรอกข้อมูลตัวเลข 2 ตัว
- ทำการเลือกว่าจะทำอะไรระหว่าง บวก ลบ คูณ หาร นั่นคือการกดปุ่ม
- แสดงผลการทำงาน
สำหรับชุดการทดสอบนี้ บอกให้เราเริ่มพัฒนา React app แบบจริงจังแล้วนะ
ทั้งการจัดการข้อมูลของ input ทั้งสองตัว ทั้งการดักจับ action ของการกดปุ่มบวก ทั้งการใช้งาน state เพื่อจัดเก็บข้อมูลผลการบวก ซึ่งถือว่ามีหลายสิ่งอย่างมาก ๆ มาดูในแต่ละส่วนกัน ส่วนที่ 1 คือ constructor สำหรับกำหนดค่าต่าง ๆ ทั้ง state เริ่มต้น ทั้ง element ต่าง ๆ ทั้ง function สำหรับการดักจับ event ของการกดปุ่ม [gist id="14c1928deed2f1adb94bcad4a834d7f2" file="3_1.js"] ส่วนที่ 2 คือส่วนของ function เมื่อทำการกดปุ่มบวก คือ onPlus() จะทำการแปลง input มาอยู่ในตัวเลขฐานสิบ จากนั้นทำการเรียกใช้งานการบวกเลขที่เขียนไว้ก่อนหน้าแล้ว เมื่อได้ผลลัพธ์จะทำการ update ค่าใน state ดังนี้ [gist id="14c1928deed2f1adb94bcad4a834d7f2" file="3_2.js"] ส่วนที่ 3 คือส่วนการแสดงผลนั่นเอง [gist id="14c1928deed2f1adb94bcad4a834d7f2" file="3_3.js"] ในส่วนนี้ต้องค่อย ๆ ทำไปทีละขั้นตอนนะ แล้วจะได้ผลการทดสอบดังนี้เมื่อผ่านแล้ว ลองเพิ่มชุดการทดสอบของ ลบ คูณและหารดูนะครับ
ผลการทำงานของระบบที่สร้าง หน้าตาง่าย ๆ แบบนี้จะเห็นได้ว่า ชุดการทดสอบจะช่วยสร้างความมั่นใจในการพัฒนาระบบให้เรา
แต่กว่าจะมั่นใจได้ ก็ต้องใช้เวลาสำหรับการเรียนรู้วิธีการสักพัก แต่คิดว่า ไม่น่ายากเท่าไร ต้องฝึก และ ฝึก และ ฝึก เท่านั้นปล. สังเกตไหมว่า เวลาในการทดสอบของแต่ละชุดการทดสอบมันแตกต่างกัน นั่นคือสิ่งที่ต้องพึงระวังเมื่อจำนวนชุดการทดสอบเยอะขึ้น มิเช่นนั้นการทดสอบจะใช้เวลานานมาก ๆใน Part ต่อไปเราจะมาลองทดสอบรูปแบบอื่น ๆ กันบ้างนะ ค่อย ๆ ทำ ค่อย ๆ เรียนรู้กันไปครับ Code ตัวอย่างอยู่ที่ Github::Up1::Workshop React Testing ขอให้สนุกกับการ coding ครับ