nodeJSMochaChai2

Selenium – JavaScript, Part 2

בפוסט הקודם למדנו כיצד אנחנו מחברים כלים וספריות שונות למערכת בדיקות אחת שבתיאוריה יודעת לקרוא את הקוד ב-JS, לפרסס אותו ולהתממשק מול אלמנטים שעל הדפדפן. בחלק השני של הפוסט “נוכיח” תאוריה זו על ידי כתיבה והבנת הקוד.

לפני שנתחיל לכתוב את הבדיקה הראשונה שלנו, בואו נראה את מה נבדוק.

בכתובת הבאה: http://blog.yoniflenner.net/Samples/BMICalc תוכלו לראות מחשבון BMI אשר יודע לחשב מדד מסת גוף, זהו קובץ HTML שיצרתי עם פונקציית JS היודעת לחשב את הנתונים בלחיצת כפתור ולזרוק לנו התוצאה בשדה מסויים, ניתן לראותו גם כאן בפוסט זה:


* למען פשטות קוד ה-HTML , את הבדיקות שלנו נבצע על הדף המקורי (לדף זה נכנס עם ה-driver.get) שנתתי בקישור למעלה.

 

myLogoPublish_SeleniumJS

 

נגדיר 2 בדיקות. לבדיקה הראשונה נכניס ערכים שגויים ונבדוק את שורת ה-warning שהמחשבון יזרוק – Please Fill in all fields correctly. לבדיקה השנייה נכניס ערכים תיקניים ונראה את התוצאה שהמחשבון יפלוט – That you are healthy.

הדבר הראשון שנעשה הוא לשייך לתוכנית שלנו את הרכיבים השונים שכבר התקנו, וזה אומר להיות כך:

 

הגדרת סוויטת בדיקות תבוצע על ידי הפקודה describe המקבלת ערכים של שם הסוויטה והגדרת הפונקציות שבתוכה. פונקציות אלו יתחיל עם המילה it ויורכבו גם הן באותו האופן עם קבלת אותם סוג של ערכים – שם הטסט והגדרת (מימוש) הפונקציה, פונקציה זו תכיל את הסטפים של כל טסט. ניתן לראות זאת בדוגמא הבאה:

 


myadvMobile

 


 

גם כאן, כמו ב-JUnit אנו יכולים להשתמש ב-Annotations , נגדיר את המתודות הללו כ- beforeEach והמימוש שלה לפני תחיחלת כל הרצת טסט ו-afterEach והמימוש שלה עם סיום הרצת הטסט. נראה זאת כך:

 

ולקראת סיום נדבר קצת על בדיקות הוולידציה, כמו שכבר כתבתי בחלק א’ של הפוסט, ניתן להשתמש בספריית ה-assertion אך היכולות של Chai assertion גבוהות ונוחות הרבה יותר. ישנן סוגים רבים מאוד של assertions ב-Chai , בדוגמת הקוד שלנו בפוסט זה אציג רק כמה בודדים, אם תרצו לקרוא עוד וללמוד את הספריה, תוכלו להיכנס לאתר הרשמי שלהם.

לצורך העניין, הדוגמא שנתתי בקוד היא דוגמא ל-assert פשוט (אולי הפשוט ביותר) , ה-OK והמקביל של ב-Chai

יהיה שווה ערך ל

 

כמו כבר ציינתי, נבדוק 2 מקרים:

1. במקרה הראשון נכניס ערכים שגויים למחשבון ה-BMI (ערכי מחרוזות של תווים במקום מספרים) ונבדוק כי אנו מקבלים הודעת שגיאה

2. במקרה השני נכניס למחשבון ערכים וולידיים ונבדוק את השדה בו מופיע פלט התוצאה על ידי שימוש ב-expect().to.contain (הכלה של טקסט)

 

ובסופו של דבר, תוכנית הבדיקות שלנו תראה כך:

עוד כמה מילים לגביי השימוש ב-done שאנו רואים בקוד שלנו. מכיוון ש-java script היא שפה שרצה על Single Thread , תהיה לנו בעיה להריץ פקודות בסדר מסויים, הן לא ירוצו בצורה אסינכרונית (לפי סדר הקריאה שלהן), למשל במידה ונשלח את פקודת ה-click ואחריה את פקודת ה-assret , יכול להיווצר מצב שבו ה-assert יפול בגלל שהוא התבצע במקביל לפקודת ה-click , שזה אומר עוד לפני ש-click יצר איזשהו event שגרם לפליטת הודעה – אותה הודעה שנרצה אח”כ לבדוק ב-assertion.

Mocha פתר לנו בעיה זו על ידי תמיכה בהרצה אסינכרונית, ובשביל שנעבוד בצורה זו נצטרך להשתמש במתודת done שתשלח לפונקציית הבדיקה שלנו כפרמטר ותיקרא בסיום ההרצה.

 

arrowPostBack