เขียน E2E Testing บน AngularJS ด้วย Protractor
บทความนี้ไม่ใช่ Tutorial นะครับ เป็นเพียงแค่การจดบันทึกของผมหลังจากที่เพิ่งหัดลองเขียน E2E Test บน AngularJS เผื่อจะมีประโยชน์แก่ผู้ที่กำลังสนใจในหัวข้อเดียวกัน สำหรับบทความนี้ผมก็อ่านมาจากหลายๆแหล่ง ยำๆมั่วๆ เท่าที่จะนึกออก ก็ประมาณด้านล่างนี้
- Protractor Tutorial
- Practical End-to-End Testing with Protractor
- Advanced Testing and Debugging in AngularJS
- Getting Started With Protractor
- Angular JS–Part 14, End to end tests
Step 1 : Create Project
เริ่มต้นผมทำการสร้างโปรเจ็ค Angular โดยใช้ Bower ทำการสร้างโฟลเดอร์ชื่อ protractor
และสร้างไฟล์ bower.json
ดังนี้
ภายในไฟล์ bower.json
กำหนดชื่อและเวอร์ชัน รวมถึง dependencies ต่างๆ ดังนี้
ทำการโหลด AngularJS ด้วยคำสั่ง
หลังจากนั้นระบบจะโหลด dependencies มาไว้ที๋โฟลเดอร์ bower_components
ภายในโปรเจ็ค
Step 2 : Create Index Page
ทำการสร้างไฟล์ index.html
ขึ้นมา แบบง่ายๆ โดยตั้งชื่อ ng-app
เป็น myApp และใช้ ng-controller ชื่อ MainController
ผมใช้ Controller As Syntax อ้างอิงจาก
โดยด้านบน มีแค่ expression เพื่อแสดง message ใน MainCtroller
Step 3 : Create Controller
ต่อมาผมทำการสร้างไฟล์ ่js/app.js
ดังนี้
ทดสอบรันเซิฟเวอร์ โดยการเปิดไฟล์ index.html
ส่วนตัวผมใช้ ้http module ของ python3
เมื่อเปิดบราวเซอร์ http://localhost:5555/ ก็จะเห็นข้อความ Hello World ปรากฎ :)
Step 4 : Install Protractor
เริ่มต้นการเขียน Test ขั้นแรก ทำการติดตั้งเจ้า Protractor ด้วยคำสั่ง
จากนั้นสั่งอัพเดท webdriver-manager
ซึ่งมันจะไปโหลดตัว Selenium Server รวมถึง Chrome Driver มาให้
Step 5 : Protractor Configuration
Protractor จะใช้ 2 ไฟล์คือ spec file และ configuration file.
- spec file : ก็คือไฟล์พวก
spec.js
- configuration file : คือไฟล์ config ตั้งชื่อว่า
protractor.conf.js
สร้างไฟล์ protractor.conf.js
ตั้งค่าดังนี้
ทำการ start protractor ด้วยคำสั่ง protractor FILENAME
จะเห็น Result ดังนี้
Step 6 : Create Test
beforeEach
: ใช้browser
ซึ่งเป็น API ของ Protractor ทำการ browser เว็บไซต์http://localhost:5555/
- Test 1 : ทำการเช็ค Title ของหน้า HTML
- Test 2 : ทำการเช็ค message ภายใน
div.main
$('div.main')
ไม่ใช่ jQuery แต่เป็น alias ของelement(by.css())
สุดท้ายทำการรัน Protractor อีกครั้ง
ได้ผลลัพธ์ดังนี้
เป็นอันเรียบร้อย :)
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust