Unit Test Java จนเบื่อลอง Unit Test Java Script มั่ง


ภาษา Java Script ก็เป็นอีกภาษาหนึ่งที่ Programer หรือ Developer ต้องมีโอกาสได้ปวดตับในการทำหรือได้แก้ไข code ของภาษานี้บ้างไม่มากก็น้อย ที่นี้ขอเท้าความเรื่อง unit test กันหน่อยเราทำไปทำไม (ใครไม่อยากอ่านซ้ำข้ามไปอีก 2 ย่อหน้าได้เลย)

ปกติ code กันไปก็ไป run test กันตอนใช้งาน browser เลยผ่านก็รอดไปไม่ผ่านก็กลับไปเขียนใหม่จนกว่ามันจะผ่านละพอผ่านแล้วก็จบไปผ่านไปนานๆ เข้ามีการปรับแก้ไขตัวเรา หรือ คนอื่นๆ ก็มาแก้กันใหม่อีกรอบแล้วก็ไป run ให้มันผ่านให้ได้เพื่อส่งงาน เป็นแบบนี้ไป 3–4 รอบ Code ที่เราทำไว้มันก็เยอะขึ้นเรื่อยๆ เริ่มกลายเป็น code ที่เรียกว่า legacy code กลายเป็น code ที่ไม่มีใครอยากจะไปแกะ เพราะมันพันอีรุงตุงนังไปหมด ใครเขียนไว้บ้างก็ไม่รู้ ไอ้ตรงบรรทัดห่านนี้เขียนไปทำไม เลิกใช้ไปแล้วนี่หว่า มันทิ้งไว้ทำไม จะแก้ที่ก็กระทบทำ case function อื่นเจ๊งไปด้วยลูกค้าก็ด่ามา ก็ต้องมานั่งไล่เช็คทุกระเบียบนิ้วใหม่ ถ้าเป็นคนใหม่มาทำงานต่อ เชื่อว่าเขียนใหม่คงง่ายกว่าไปไล่ของเก่า

ปัญหานี่จะหมดไปถ้าเราแบ่ง function การทำงานต่างๆให้เป็น function ที่ทำ 1 เรื่องต่อ 1 function นั้นๆเท่านั้นและมี unit test ไว้ตรวจสอบการทำงานของ function นั้นจากนั้นก็เอาหลายๆ function มาประกอบเพื่อใช้งาน ที่นี้มีการปรับแก้ขึ้นมา เราก็ไปแก้มันแค่เฉพาะ function ที่เกี่ยวข้องเท่านั้นแล้วก็ใช้ unit test ที่เราทำมาตรวจสอบว่ามันยังทำงานได้ถูกต้องใหม่ แล้วก็ run unit ทุกตัวทั้งหมดซ้ำอีกที่ว่าการทำงานของทุกๆ function ยังคงทำงานได้ถูกต้อง

กลับมาเรื่อง unit test ของ java script ซึงผมจะใช้ jasmine เป็น open source framework ตัวหนึ่งที่ใช้สำหรับทำการเขียน unit test กับ java script ที่นี้ผมจะทำให้มันง่ายขึ้นไปอีกหน่อยสำหรับคนที่ใช้ Eclipse และ Maven เป็นตัวพัฒนา project source code

ผมจะใช้ jasmine-maven-plugin ทำให้ทุกครั้งที่ maven ทำการ build project หรือมีการสั่ง maven-test นอกจาก test unit test ของ java code แล้วก็จะทำ test ของ java script ให้ด้วย เป็น CI เพื่อ Testไปในตัว

ตัวอย่างการ config ของ jasmine plugin กับ pom file เพื่อให้ maven ที่การนำ jasmine ไปใช้งาน

ต่อไปเป็นการทดสอบสร้าง java script program ขึ้นมา 1 file แล้วก็มีการสร้าง java script ที่เป็นตัว test ขึ้นมา 1 file เช่นกัน เป็นโปรแกรมบวกเลขธรรมดา

ส่วนตัว test ผมจะใส่ expect ผิดไว้ที่ข้อสุดท้ายเพื่อทดสอบดูผลลัพธ์ในกรณีผิดพลาดจากนั้น maven test เพื่อดูผลกันเลย

จะเห็นว่า Build failure เพราะ unit test ของ java script ผิดไป 1 ข้อ ไปแก้ใหม่ให้มันถูกแล้ว run ใหม่อีกครั้ง

เพียงแค่นี้ก็ผ่านแล้วจะเห็นว่าเพียงเราเสียเวลาเล็กน้อยไปทำ test ทดสอบแต่เราจะได้ตัว unit test ที่จะค่อยช่วยตรวจสอบการทำงานให้เราไปตลอดชีวิต

Reference
jasmine เขียนยังไง : https://jasmine.github.io/

แล้ว Angular เขียนได้ไหม http://andyshora.com/unit-testing-best-practices-angularjs.html

สุดท้ายขอบคุณที่เข้ามาอ่านบทความแรกของผมบน Medium :P

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.