มาทำโปรเจ็ค JavaScript แบบใช้ TDD กันไหมครับ .. แบบหัดๆ

พอดีผมไปหา code เก่า… แล้วเจอ code ที่เขียนแบบนี้

var graph_url = '/' + pageId + '/members/' + uid;

ปวดตับมาก code แม่งดูโคตรยากเลย ต่อ string กันกระจาย…

ก็เลยคิดว่าถ้าเราเขียนฟังก์ชั่นทำ แบบนี้
str_parse("/${0}/members/${1}", [pageId, uid]); ก็คงจะดีไม่น้อย ได้ใช้บ่อยแน่นอน (ลอกมาจาก facebook api ของ facebook ในส่วนของ FQL)

แล้วก็จะเขียนด้วย /BDD เพราะว่าจะได้ฝึกหัดการเขียนโปรแกรมแบบ ไปในตัว
และสร้างความสนิทสนมกับ ด้วย [ เป็น behavior-driven framework]

เข้าเรื่องกันเลยดีกว่า…

โครงสร้าง

โครงสร้างของโปรเจ็คที่เราใช้ Jasmine จะเป็นแบบนี้

untitled

เราจะเขียน test กันใน spect/string_template_spec.js
แล้วเขียนฟังก์ชั่นใน src/string_template.js
รันเทสใน SpecRunner.html จ้า

รันเทส

พอเรารันเทสจะได้ประมาณนี้

Screen shot 2011-07-22 at 1.21.33 PM

Code Coverage

ผมใช้ เพื่อดู code coverage แบบนี้ (ใช้ python simple http รัน http server)

Screen shot 2011-07-22 at 1.27.55 PM

ถ้าสนใจ

ใครสนใจ บอกชื่อ ไว้ได้เลยครับ เดี๋ยว add เพิ่มเป็น collaborators จะได้มา code เล่นๆกัน (หรือหัดเขียน requirement กัน)

สถานะตอนนี้

ตอนนี้ code มันมั่วมากและกากมาก ยังไม่ได้ refactor เขียนตาม test case มาเรื่อยๆ ค่อยๆ hard code กันมา

string_template.js-1

ไม่ได้เขียน requirement ก่อน ทุกอย่างสดเลย สด สุดๆ

requirement เปลี่ยนไวมาก [เกิดมาจากความคล้ายกันของ Array และ Object] อยากได้ function เก่งๆ

แต่ก็ค่อยๆปรับกันไป ยังไงก็เขียนเทสก่อน ไม่ค่อยเป็นกังวลเรื่องเปลี่ยนแล้วจะท้อ… กับบั๊ก
หน้าที่ของเราคือทำให้มันเขียวก็พอ

เขียนเล่นๆ ถือว่าเป็นการเรียนรู้กระบวนการแบบ Test First, การเปลี่ยนแปลงของ Requirement, หัดใช้ Jasmine กันไป

เพื่อความมันส์ของวันนี้…

ปล. 1 ผมใช้ JSLint และ JSHint ช่วยตรวจสอบคุณภาพของ code
ปล. 2 ผมใช้ Jasmine แบบ simple สุดๆ มีแต่ toEqual และเทสเคสมึนๆ
ปล. 3 git repository อยู่ที่ https://github.com/NAzT/js-string-template

เรื่องที่เกี่ยวข้อง

Comments are closed.