สร้าง Environment เพื่อใช้ Unit Test ในการพัฒนา WordPress Theme

July 6th, 2016

ในการพัฒนา WordPress Theme หรือซอฟต์แวร์อื่นๆ ก่อนที่จะเปิดให้ผู้ใช้เข้ามาใช้งาน ระบบของเราจะต้องผ่านการทดสอบก่อน ทีนี้การทดสอบนั้นอาจจะแบ่งแยกย่อยมาได้ 2 แบบใหญ่ๆ คือแบบ Manual นั่นคือ Developer/Tester จะมานั่งจิ้มๆ แล้วหาว่าตรงไหนพังหรือไม่พัง แล้วไล่จิ้มตามรายการที่เราลิสต์ไว้ และแบบ Automated หรือแบบที่ Developer/Tester สั่งรันสคริปโป้งเดียวแล้วนั่งจิบเบียร์ดูผลการรัน

แน่นอน ใครๆ ก็อยากทำแบบที่ 2 ทั้งสบาย ทั้งเร็ว ทั้งลดความเสี่ยงที่เราจะพลาดบางจุดไป (แต่ก็ไม่ได้หมายความว่า Manual Test ไม่จำเป็นนะ งานบางอย่างเราก็ต้องใช้ Manual Test อยู่) ดังนั้นโพสต์นี้จะมาเริ่มต้นสร้าง Environment เบื้องต้นสำหรับการเขียน Automated Test แบบหนึ่งที่เรียกว่า Unit Test ในการพัฒนา WordPress Theme กัน

เริ่มต้น สิ่งที่เราต้องเตรียมมี 2 อย่างหลักๆ ไม่รวมพวกฐานข้อมูล หรือพวกเว็บเซิฟเวอร์ คือ

  1. PHPUnit
  2. WordPress Tests

ขอไม่กล่าวถึงวิธีลง PHPUnit บนเครื่องตัวเอง สามารถอ่านวิธีลงได้ในเว็บนั้นอยู่แล้ว แต่ถ้ามีข้อสงสัย ก็สามารถทิ้งคำถามไว้ได้ครับ 😉

เอาละ วิธีลง WordPress Tests ก็ง่ายมาก ใช้โปรแกรม Subversion โหลดโค้ดลงมาไว้บนเครื่องตามคำสั่งข้างล่างนี้

svn checkout http://core.trac.wordpress.org/browser/tests/trunk wordpress-tests

คำสั่งข้างบนนี้จะโหลดไฟล์ที่สำคัญๆ ทั้งหมดที่เราต้องใช้เขียน Unit Test มาใส่ไว้ในโฟลเดอร์ wordpress-tests แล้วเราก็เอาโฟลเดอร์นี้ไปวางไว้บนเว็บเซิฟเวอร์บนเครื่องของเรา ถ้าใครใช้ XAMPP บน Mac ก็จะอยู่ที่ /Application/XAMPP/htdocs/ ส่วนถ้าใครใช้ Ubuntu ก็จะอยู่ที่ /var/www/

หลังจากนั้น ในโฟลเดอร์ wordpress-tests จะมีไฟล์ wp-tests-config-sample.php อยู่ ให้เราเปลี่ยนชื่อไฟล์เป็น wp-tests-config.php แล้วเปิดไฟล์ขึ้นมาดู

เริ่มต้นที่บรรทัดที่ 4

define( 'ABSPATH', dirname( __FILE__ ) . '/wordpress/' );

จะเป็นการบอกตำแหน่งของโปรเจค WordPress Theme ของเรา ซึ่ง WordPress Tests จะมีอยู่แล้ว 1 โปรเจค (เป็นตัวที่เค้ากำลังพัฒนาอยู่เรื่อยๆ) ถ้าเราอยากพัฒนา Theme ของเราบ้าง เราก็ไปโหลด WordPress มา แก้ชื่อโฟลเดอร์ซะ แล้วเอามาวางไว้ในโฟลเดอร์ wordpress-tests นี้ แล้วก็แก้จาก /wordpress/ เป็น /geekwordpress/ เป็นต้น

สิ่งที่เราต้องแก้ต่อไปคือบรรทัดที่ 24 - 26

define( 'DB_NAME',     'yourdbnamehere' );
define( 'DB_USER',     'yourusernamehere' );
define( 'DB_PASSWORD', 'yourpasswordhere' );

ใส่ชื่อฐานข้อมูลของเรา ชื่อ user และ password ตามลำดับ แล้วก็อย่าลืมไปสร้างฐานข้อมูลตามที่เราตั้งชื่อไว้ล่ะ ไม่งั้นตอนรัน phpunit จะรันไม่ผ่าน

เอาล่ะ เรามาลองรัน phpunit ดู เพื่อดูว่าเราได้สร้าง Environment สำหรับใช้ Unit Test ในการพัฒนา WordPress Theme เสร็จเรียบร้อยแล้ว ให้เราเข้าไปที่โฟลเดอร์ wordpress-tests แล้วสั่ง phpunit เลย ถ้าเรารันได้ไม่ติดปัญหาอะไร จะเห็นหน้าตาประมาณนี้

Running as single site... To run multisite, use -c multisite.xml
Not running ajax tests... To execute these, use --group ajax.
PHPUnit 3.7.19 by Sebastian Bergmann.

Configuration read from /var/www/wordpress-test/phpunit.xml.dist

................F............................................ 61 / 1726 ( 3%)
SS.....SS...

มีทั้ง . (pass) ทั้ง F (fail) ทั้ง S (skip) ก็ไม่ต้องตกใจ เพราะนี่เป็นการรันชุดทดสอบของตัว WordPress ที่เค้ากำลังพัฒนาอยู่ ไม่ใช่ตัว bug-free

โอเค! ไว้เราค่อยมาพูดถึงการเขียนชุดทดสอบในการพัฒนา Plugin หรือ Feature ต่างๆ ในโพสต์ต่อๆ ไปกันครับ 🙂 ย้ำกันอีกที ทิ้งคำถามไว้ได้เลยถ้ามีข้อสงสัย

ปล. สำหรับคนที่ตั้งค่าพวกนี้ครบแล้ว แต่พอรัน phpunit แล้วขึ้น Error Establishing a Database Connection อยู่ ให้ลองเปลี่ยนบรรทัดที่ 27 ในไฟล์ wp-tests-config.php จาก localhost ให้เป็น 127.0.0.1 แล้วลองรันใหม่ดู