พบว่าหลายครั้งมักเขียน UnitTest กันเกินหน้าที่ทำให้ UnitTest ทำงานช้าหรือต้อง Setup ยุ่งยากจนยากแก่การ maintain หรือบางครั้งก็เขียนซ้ำกันจนทำให้การเขียน test มันไม่สนุกและเลิกเขียนกันไป อาบน้ำอยู่ก็เลยคิดขึ้นมาว่าเอาสิ่งที่เจอๆ มาเขียนเป็นกฏซักหน่อยดีกว่า ไว้เอาไปบังคับคนอื่นว่าควรเขียน test ยังไง อย่า test module ภายนอก, ข้อนี้เจอช่วงแรกๆ ตอนนี้ที่ทดลอง process เพราะมี third party component หนึ่งที่ต้องเรียกก่อนจะเรียกใช้ method อื่นได้เวลาทำงานจริง ตอนเขียน test น้องๆก็เลยหวังดีเขียน case ครอบด้วยว่า third party ทำงานสำเร็จไหม ซึ่งไม่จำเป็นเลยสำหรับ UnitTest และกลายเป็นว่า case นั้นเป็นการ test third party แทนและ case นี้ถูกเขียนซ้ำบ่อยสุด จนเป็นตัวขัดขวางทำให้เขียน test ยากขึ้นในอนาคตเมื่อ third party เปลี่ยน [...]
Test-Driven JavaScript Development
วันนี้หยิบหนังสือที่พึ่งซื้อมารีวิวซะหน่อยหลังจากที่ไม่ได้เขียนถึงนานตั้งแต่มีนาคมปีที่แล้ว เพราะไม่ได้ซื้อหนังสืออะไรใหม่เกี่ยวกับด้านนี้อีกเลย (จริงๆ ก็มีอีกเล่มนึงที่ซื้อคู่กันตอนทำ prosody ไว้เขียนถึงคราวหน้าละกัน) ที่ซื้อเล่มนี้มีเหตุผลง่ายๆ เพราะไม่รู้จะเขียน UnitTest ใน JavaScript ยังไง หนังสือที่ว่าก็ตามชื่อ Post นี้เลย Test-Driven JavaScript Development หนังสือเล่มนี้มีด้วยกันสี่ส่วน เริ่มจากแนะนำว่า Test-Driven Development คืออะไรต้องทำอะไรบ้าง UnitTest เขียนยังไง คนที่เขียน UnitTest ในภาษาอื่นมาก่อนแล้วก็ข้ามๆส่วนนี้ไปก็ได้ ตามมาด้วยส่วนที่พูดถึง JavaScript ว่าเขียนยังไงบ้างคนเขียน JavaScript เป็นอยู่แล้วก็ข้ามไปได้อีกนั่นแหละ (ข้ามมาสอง Part หละ!) ทั้งสอง Part ถ้าอ่านละเอียดๆ ก็จะมีแนะนำ Pattern ว่าจะเขียนยังไงให้ดูสวยและเขียน/เรียกใช้ UnitTest ง่ายอยู่ด้วยไม่มากเท่าไหร่แต่ก็พอให้เห็นว่าจะเขียนยังไงได้บ้าง มาถึงส่วนที่สาม ส่วนนี้จะพูดถึงการพัฒนาแบบ Test-Driven จริงๆหละว่าคนเขียนทำอะไรอย่างไรบ้างใช้เทคนิคไหน Pattern ที่ใช้หน้าตาอย่างไร จะเขียน Test กับพวก Ajax อย่างไร [...]
TestIt Suite Runner
TestIt มีปัญหาอย่างนึงที่ยังแก้ไม่ได้คือ เมื่อเอาหลายๆ test มารันด้วยกันพร้อมกันบางครั้งทำให้ test ที่เคยทำงานผ่านกลับไม่ผ่าน เวลาเรียกรวมเลยต้องแยก test เหล่านั้นออกแต่ด้วยความขี้เกียจยังคงอยากเรียกที่เดียวแล้วเห็นผลลัพธ์ทั้งหมด เลยเขียน script เล็กๆเพื่อมาเรียกพวกนั้นรวมทีนึง เวลาใช้ก็เพียงแค่ แต่ยังมี config อีกเล็กน้อย ต้องสร้าง suite.js (หรือจะชื่ออะไรก็แล้วแต่) เป็นไฟล์ที่บอกว่าจะเรียก test ไหนให้ทำงานร่วมกันบ้าง หน้าตาก็อย่างด้านล่าง สุดท้ายแล้ว เอา suite ไปเพิ่มในไฟล์ด้านล่าง (ไว้แยกออกมาและทำงานได้บน Browser ทีหลังละกัน) save file ด้านบนเอาไปเรียกใช้ตามสะดวก วิธีเรียกก็มี node suite.js all ที่จะเห็นผลลัพธ์แบบละเอียด (แสดงแต่ละ test ว่าอะไรผ่านไม่ผ่านบ้าง) node suite.js summary เพื่อดูแค่ว่ามี suite ไหนผ่านไม่ผ่านบ้าง node suite.js suite เพื่อเรียกเฉพาะ suite ที่ต้องการ สิ่งที่ยังไม่ได้ทำ [...]
TestIt
หลังจากเริ่มจัดการ Dev Process จริงจังสิ่งหนึ่งที่เป็นปัญหาต้ังแต่เข้าไปในทีมคือ unit test เพราะไม่มีใครเคยทำมาก่อนในฝั่ง Javascript มีบ้างก็เป็นการทดลองรวมๆ มากกว่า เวลาจะเรียกทีต้อง start server เรียกได้แทบฝันร้าย เรียกแล้วผ่านไม่ผ่าน ไม่มี format ตายตัวรันที Terminal เต็มไปด้วย Text วันแรกๆ เลยทดลองหา Test framework ที่ถูกใจ ใช้ง่าย ใช้ได้ทั้ง client server ก่อนเลย รอบแลกคิดว่าจะใช้ nodeunit เพราะว่าสามารถใช้ node.js มีผลลัพธ์ให้เห็นสวยงาม แต่พอเอาไปใช้กับ test เก่าที่บางส่วนต้องเรียกบน browser เริ่มเห็นลางร้ายเพราะต้องแยก code test ดีๆ ให้ทำงานบน browser หาอยู่หนึ่งวันยอมแพ้ หาตัวเลือกอื่นก็เปิด wiki หาว่า Javascript มี Test framework อะไรใช้ได้บ้างก่อนเลย [...]
The Art of Unit Testing
ตอนเริ่มทำงานใหม่ ๆ ผมก็พอรู้จัก Unit Test มาบ้างแล้ว แต่ที่รู้จักคือมีแค่ Assertion ธรรมดา สร้างไว้เพื่อทดสอบโค้ดส่วนต่าง ๆ ว่าสิ่งที่ต้องการสร้างนั้นทำงานถูกต้อง เหมือนเวลาเขียนโค้ดแล้วอยากรู้ว่าสิ่งที่เราคิดทำงานถูก ก็จะไปสร้างโปรแกรมเล็ก ๆ มี main แล้วใส่โค้ดส่วนนั้นไว้ลองรันดู แต่หลังจากเริ่มทำงาน สิ่งที่รู็จักเพิ่มขึ้นคือการตั้งค่าต่าง ๆ เพื่อทำให้ Unit Test เดิมสามารถทำงานได้ ช่วงแรกก็พยายามที่จะรัน รู้สึกตื่นเต้นว่ามีเทคนิคต่าง ๆ เยอะเลย มีการกำหนด setup เพื่อสร้าง Object ต่าง ๆ ก่อนทดสอบ มี Class ที่สร้างมาเพื่อใช้ในการทดสอบโดยเฉพาะเรียกว่า Mock แต่กว่าจะรันพวกนี้ได้แต่ละครั้ง เหนื่อยมาก จนสุดท้ายก็เลิกทำ และเลิกเขียนไป หลัง ๆ มีน้องเข้ามาใหม่ ก็พยายามให้น้องเขียน Unit Test แต่ลดพวก dependency พวกนี้ลง ให้มันจบใน Unit [...]