เมื่อ 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