Testing the Application

From Blognone

Jump to: navigation, search

ทดสอบแอพพลิเคชัน

ถึงแม้ว่าจะมี IDE สำหรับ HTML (อย่างเช่น Dreamweaver) หลายตัวที่สนับสนุนการรันแอพพลิเคชัน AIR เพื่อทดสอบได้ในตัว แต่เราจะมาดูวิธีการเรียกและทดสอบแอพพลิเคชัน AIR โดยใช้เครื่องมือคอมมานด์ไลน์ ADL ซึ่งมากับชุด SDK วิธีนี้จะทำให้คุณเข้าใจว่าเกิดอะไรขึ้นบ้างระหว่างการรัน

Contents

ใช้ ADL เพื่อเรียกแอพพลิเคชัน

ขั้นแรกสุดในการทดสอบแอพพลิเคชัน คุณควรตรวจสอบว่า

  • ไม่มีอะไรผิดพลาดในไฟล์อธิบายข้อมูลแอพพลิเคชัน
  • แอพพลิเคชันทำงานได้
  • การแสดงผล HTML ถูกต้อง
  • โค้ด JavaScript ทำงานตามที่ต้องการ

เราสามารถทำแพ็กเกจของแอพพลิเคชันทั้งตัว จากนั้นติดตั้งและลองเรียกใช้งานมันได้ แต่นั่นเป็นวิธีที่ยุ่งยากต่อการทดสอบ โชคดีที่ SDK ของ AIR ได้ให้ ADL ซึ่งช่วยให้คุณสามารถเรียกแอพพลิเคชัน AIR ขึ้นมาทำงานโดยไม่ต้องติดตั้งได้

ขั้นตอนการทดสอบมีดังนี้

  1. เปิดหน้าต่าง Terminal (Mac) หรือ Console (Windows)
  2. เปลี่ยนไดเรคทอรีไปยังที่ที่มีไฟล์ AIRHelloWorld.html และ AIRHelloWorld.xml
  3. เรียกใช้ ADL ตามด้วยชื่อของไฟล์อธิบายข้อมูลแอพพลิเคชัน ดังนี้
    adl AIRHelloWorld.xml

คุณควรจะเห็นแอพพลิเคชันโดยใช้หน้าต่างมาตรฐานของระบบปฏิบัติการ

(ภาพ)

ถ้าแอพพลิเคชันทำงานไม่ถูกต้อง หรือคุณเจอข้อความแสดงความผิดพลาด คุณควรตรวจสอบว่า

  • คุณตั้งค่า SDK ถูกต้อง และหา ADL เจอ
  • คุณเรียกคำสั่ง ADL จากไดเรคทอรีที่มีไฟล์ AIRHelloWorld.xml
  • ไฟล์อธิบายข้อมูลแอพพลิเคชันมี syntax XML ที่ถูกต้อง (well-formed)
  • ข้อมูลในไฟล์อธิบายแอพพลิเคชันถูกต้อง โดยเฉพาะ rootContent
  • ตรวจสอบว่า AIRHelloWorld.html และ AIRHelloWorld.xml อยู่ในไดเรคทอรีเดียวกัน

เมื่อคุณแก้ปัญหาเหล่านี้ และสามารถเรียกแอพพลิเคชันได้แล้ว คุณยังสามารถเรียนรู้วิธีดูข้อมูลจากแอพพลิเคชันขณะรันได้ด้วย

ดูผลการทำงานของแอพพลิเคชันขณะรัน

เมื่อทำมีหลายวิธีการในการหาข้อมูลและดีบั๊ก ขณะที่เรียกแอพพลิเคชันด้วยคำสั่ง ADL

ข้อผิดพลาด JavaScript ขณะรัน

ความผิดพลาดทั้งหมดที่เกิดจาก JavaScript ในช่วงที่แอพพลิเคชันกำลังรันจาก ADL นั้น จะแสดงออกมาทาง standard output ของ ADL

ลองแก้ให้แอพพลิเคชันเกิดข้อผิดพลาดเพื่อดู output โดยเปลี่ยนข้อความใน AIRHelloWorld.html ดังนี้

<html>
 <head>
 	<title>AIRHelloWorld</title>
 	<script>
 		function init( )
 		{
 			runtime2.trace("init function called");
 		}
 	</script>
 </head>
 <body onload="init( )">
 	<div align="center">Hello World</div>
 </body>
 </html>

สิ่งที่เราแก้ไขคือในฟังก์ชัน init โดยเปลี่ยนค่า runtime เป็น runtime2 (ซึ่งไม่มีอยู่จริง)

runtime2.trace("init function called");

จากนั้นบันทึกไฟล์แล้วเรียกแอพพลิเคชันด้วย ADL

adl AIRHelloWorld.xml

แอพพลิเคชันควรทำงานได้ และคุณควรเห็น output จากคอมมานด์ไลน์ดังนี้

ReferenceError: Can't find variable: runtime2
init at app-resource:/AIRHelloWorld.html : 8
init at app-resource:/AIRHelloWorld.html : 8
onload at app-resource:/AIRHelloWorld.html : 13

ข้อความที่เห็นเกิดจากการค้นหาตัวแปร runtime2 ไม่พบ ตามด้วยเลขบรรทัดของโค้ดที่เป็นปัญหา และ stack trace ของการเรียกโปรแกรมให้ทำงาน

ข้อมูลเหล่านี้จะช่วยในการค้นหาข้อผิดพลาดภายในแอพพลิเคชันของคุณ

ในบางครั้งมีโอกาสที่แอพพลิเคชันทำงานได้ไม่ถูกต้อง แต่ไม่แสดงข้อผิดพลาดออกมา ในกรณีแบบนี้การใช้วิธีดูข้อมูลของแอพพลิเคชันขณะรันจะมีประโยชน์มาก

AIR มีฟังก์ชันที่ช่วยให้การส่งข้อมูลจากแอพพลิเคชันออกมาทาง standard out ขณะรันทำได้ง่ายขึ้น

runtime.trace

ดังที่เราได้ทำในบทนี้ Adobe AIR มีขบวนการในการส่งข้อความจาก JavaScript ออกไปยังคอมมานด์ไลน์

ฟังค์ชัน trace จากคุณสมบัติ runtime รับข้อความซึ่งจะถูกแสดงออกที่ standard out ของ ADL นี่เป็นตัวอย่างการใช้งาน

runtime.trace("This will be sent to standard out");

นี่จะเป็นประโยชน์มากในการแสดงข้อมูลเกี่ยวกับสถานะของแอพพลิเคชันโดยไม่รบกวนการทำงานของโปรแกรม

ออบเจ็คท์ที่ไม่ใช่ข้อความที่ถูกส่งให้กับ trace จะถูกเรียกฟังค์ชั่น toString() ของมัน โดยออบเจ็คท์ Object ของ JavaScript จะมีฟังค์ชัน toString() พื้นฐานอยู่ และบางคลาส (เช่น Array) อาจจะมีฟังค์ชัน toString() ที่ทำงานสัมพันธ์กับข้อมูลของมัน

นี่เป็นตัวอย่างของการแสดงข้อมูลหลายแบบที่เก็บไว้ในอาเรย์

var a = ["a", 1, {foo:"bar"}];
runtime.trace(a);

ผลลัพธ์ของชุดคำสั่งนี้ จะแสดงที่คอมมานด์ไลน์จาก ADL

a,1,[object Object]

แน่นอน คุณสามารถเขียนฟังค์ชัน toString() ของคุณเองสำหรับคลาสใน JavaScript ที่คุณพัฒนาขึ้นมา หรือเขียนทับฟังค์ชัน toString() ของคลาสที่มีอยู่แล้ว เพื่อที่จะแสดงข้อมูลที่เฉพาะเจาะจงมากขึ้น