Wednesday, April 18, 2018

TDD : Test-Driven Development Python Part 4

      สวัสดีครับ ในบทความนี้เราจะมาเริ่มกันที่เขียน test ว่า function ของเราสามารถส่ง input เข้าไปใน web app ของเราได้รึป่าวโดยเราจะไปทำที่  functional tests กัน เปิดไฟล์ functional_tests.py แล้วเขียน code ดังนี้

 

เมื่อ run test


จะพบว่ามัน error ประมาณว่า ไม่สามารถหา element <h1> ดังนั้นเราจะต้องไปทำ html ให้กับ web app ของเรากัน
"Don’t Test Constants and Templates"
**ในส่วนของ html หรือ  Templates เราจะไม่มีการ test นะ**
 เริ่มจากสร้าง folder templates แล้วไปสร้างไฟล์ html  ชื่อ home.html


จากนั้นเขียน code ตามนี้


แล้วย้อนกลับไปที่ไฟล์ views.py แล้วเขียน code ตามนี้


เมื่อ run test


มันจะขึ้น error ประมาณว่า "หา templates ไม่เจอ" ซึ่งทำให้เรานึกขึ้นได้ว่า "เรายังไม่ได้ติดตั้ง app"

เราจะต้องไปที่ ไฟล์ settings.py ที่อยู่ใน folder superlists แล้วแก้ไฟล์ดังนี้


เมื่อ run test


เราจะพบว่ามัน error "หา templates ไม่เจอ" ตอนนี้ได้ถูกแก้ไขแล้วแต่! มันไป error ว่ามัน AssertionError แทน ตรงจุดนี้น่าจะมีอะไรผิดที่ output ดังนั้นเราจะแก้ไขแบบ ง่ายๆไปก่อนโดยให้ไปที่ file tests.py  ที่อยู่ใน folder list ของเรา แล้วเขียน code ดังนี้


เมื่อ run test


เราจะเห็นได้ว่า error ได้หายไปแล้ว

ต่อมาเราจะมา check กันว่า เรา render templates ได้ถูกต้อง โดยให้ไปที่ file tests.py  ที่อยู่ใน folder list ของเรา แล้วเขียน code ดังนี้ (ดูตรงขีดแดงๆไว้นะ)


เมื่อ run test


บางคนอาจจะสงสัยว่า "อ้าว ทำไม templates มันไม่เจอละ หรือ บางคนอาจจะรู้แล้ว" ส่วนคนที่ไม่รู้ผมจะมาเฉลยให้นะ ที่ templates  ไม่ออกเพราะว่า "ดูตรงขีดแดงๆใน file tests.py ที่ผมให้แก้ ตรงนั้นชื่อไฟล์มันผิดครับ มันต้องเป็น ชื่อ home.html ตามชื่อ file templates เราสิ ส่วนสาเหตุที่ผิดเพราะผมจงใจครับ เพราะการเขียน test ในครั้งแรกเราต้องจงใจให้มันผิดครับ จะได้แก้ไข

ดังนั้นให้เราไปแก้ render_to_string ครับ


เมื่อ run test


เราจะเห็นว่า error ได้หายไปแล้ว

จากนั้นเราจะมา Refactoring code เรากัน โดยเราจะไปที่ file tests.py ใน folder list แล้วลบ def test_root_​url_resolves แล้วเขียน def test_uses_home_template(self): ไปแทน


เมื่อ run test


แสดงว่า code ของเราไม่ error

จำได้ไหมครับว่า "functional test ของเรายังคง error อยู่" ซึ่งได้เวลาที่เราจะแก้กันแล้ว โดยไปที่ file template (home.html) ของ app list ของเราแล้วแก้ code ดังนี้


เมื่อ run test


เราจะเห็น error อะไรซักอย่างซึ่งอ่านละคลุมเครือ ดังนั้นเราจะมาแก้ให้มันแสดง error ที่ชัดเจน โดยไปที่ file functional_test.py แล้วเขียน code ดังนี้



เมื่อ run test


เราก็จะได้ error ที่ชัดเจนขึ้นกว่าเดิมนั้นคือ
AssertionError: False is not true : New to-do item did not appear in table
ซึ่งเราก็ขอจบบทความนี้ไว้เพียงเท่านี้ก่อนนะ ในบทถัดไปเราจะมาแก้ไข error ดังกล่าวกัน
วันนี้เราเดินทางกันมาไกลมาก เดี๋ยวมาต่อในบทความต่อไปนะ อย่าลืม commit ละ

No comments:

Post a Comment