Table of Contents
מדוע בדיקות הן קריטיות עבור React Native Apps
React Native הפך לכוח הדומיננטי בפיתוח סלולרי, המאפשר לצוותים לשלוח יישומים חוצה פלטפורמות עם בסיס קוד JavaScript יחיד.עם זאת, שכבת הפשטות בין JavaScript ומודולים מקומיים מציגה נקודות כשל ייחודיות שיכולות להגיע לדרכים בלתי צפויות. אסטרטגיה של בדיקות ממושמעת אינה אופציונלית ו-#8212; היא הבסיס של יישום יציב, אמין וידידותי למשתמש.
כאשר אתה משקיע בגישה של בדיקות שכבתיות, אתה מקבל את היכולת לתפוס תוקפנות מוקדם, לספק ביטחון, ולספק עדכונים ללא שבר פונקציונליות קיימת. מאמר זה מספק מבט מעשי, מעמיק על שלושת סוגי בדיקות הליבה עבור יישומים: יחידת, שילוב, ומבחן קצה עד קצה מקצה לקצה.We will Cover the Tools, True-world תבניות יישום, וכיצד לחדד את כל שלוש השכבות.
מודל בדיקות שלושת המינים
כל אסטרטגיית בדיקה חזקה נחה על שלושה עמודי עמוד: בדיקות יחידה, בדיקות אינטגרציה, ובדיקות קצה-קצה (E2E) .כל עמוד משרת מטרה ייחודית ומטרות רמה שונה של ארכיטקטורת היישום.
בדיקה אחרונה ב-Isolating the Smallest Pieces
בדיקת יחידה מטרות פונקציות, קובצים או רכיבים בבידוד מוחלט.המטרה היא לוודא שפיסת לוגיקה אחת מתנהגת כראוי ללא התערבות של תלות כמו שיחות API, שאילתות מסד נתונים או רכיבים אחרים.
(ב) [ה]ה] [ה]"ה']" הוא מסגרת הבדיקה הסטנדרטית לפרויקטים של React Native, והוא ספינות עם רוב הפרויקטים החדשים שנוצרו באמצעות FLT:0.
מה לעשות ב-React Native
- (FLT:0) פונקציות של יעילות (FLT:1 ו-#8211; איורים נתונים, לוגיקה אימות, עוזרי תאריך ופעולות מתמטיות.
- (ב) ,0) ,Custom wirsFLT 1 ו-#8211; בדוק כי מעברי המדינה ותופעות הלוואי מתנהגים כצפוי.
- (ב) ,0) מחנכים ולוגיקה ניהול המדינה 1 ו- #8211; לאשר כי פעולות לייצר את המדינה החדשה הנכונה.
- (ב) [13]:0) מרכיבים מועדפים (FLT:1 – ודאו שהם מספקים את הפלט הנכון עבור אביזרים שונים (למרות שגבולות אלה על שילוב אם מעורבים רכיבים בילדים).
מבחן יחידת הפרקטיקה
שקול פונקציה שירות כי פורמט מחרוזת תאריך עבור התצוגה במבחן יחידת UI יספק ערכים קלט שונים וטוען את מחרוזת הפלט המדויק.שימוש Jest, אתה יכול לכתוב:
import { formatDisplayDate } from './dateUtils';
describe('formatDisplayDate', () => {
it('returns "Today" for the current date', () => {
const now = new Date();
expect(formatDisplayDate(now)).toBe('Today');
});
it('returns "Yesterday" for one day ago', () => {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
expect(formatDisplayDate(yesterday)).toBe('Yesterday');
});
it('returns a formatted short date for older dates', () => {
const date = new Date('2024-03-15');
expect(formatDisplayDate(date)).toBe('Mar 15');
});
});
בדיקות אלה לרוץ במילימטרים ולספק משוב מיידי.הם לא דורשים מכשיר או חיקוי, מה שהופך אותם אידיאליים עבור הדבקה טרום-קומית או בדיקה מקומית מהירה במהלך הפיתוח.
היתרונות של Unit Testing
- (ב) [15] ויקרא י"א: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) ,9.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10
- (הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) ביצוע של דוגמה ל- 1 ו-#8211; בדיקות יחידות בכתב-טוב משמשות כתיעוד מתואם לאופן שבו נועד לתפקד תפקיד.
בדיקה אחרונה ב-3 ביולי 2008.
בעוד שבדיקות יחידה מאשרות כי חתיכות בודדות פועלות בבידוד, בדיקות אינטגרציה מאמתות את העובדה שיצירות אלה פועלות יחד נכון.באפליקציית React Native, בדיקות שילוב כרוכות לעתים קרובות במתן עץ רכיב, סימול אינטראקציות משתמשים, וטוען כי עדכוני UI כצפוי.
(FLT:0)React Native Testing Library (RNTL) ההרחבה 1) הוא הכלי Go-to לבדיקת אינטגרציה.RNTL בונה על גבי Jest ומספק שירותים לרכיבת רכיבים, השאילתה של הפלט שניתנו, ואירועי ירי.זה מעודד התנהגות בדיקה שמשתמשים חווים למעשה ולא פרטים פנימיים.
מה לעשות כדי לשילוב מבחן ב React Native
- (ב) [ה]היחסים בין ה- 0 ל-[[1924]] ו-#8211; האם לחיצה על כפתור גורמת לשינוי הניווט או המצב הנכון?
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0Data FlowFalLT:1 ו-#8211; האם עדכון רכיב רשימה נכון כאשר הנתונים מובאים מ- API (עם בקשות רשת לעגות)?
- (FLT:0) התנהגות ברמה של סיינטולוגיה (FLT:1 – האם מעבר מסך הכניסה המלא של המדינה המזויפת לטעון את המדינה למצב שגיאה?
מבחן אינטגרציה מעשי
דמיינו מסך כניסה עם שדות דואר אלקטרוני וסיסמה, כפתור הגשת, ואזור שגיאה אימות.שימוש ב-RNTL, תוכלו לדמות מילוי שדות ולדחוף את הכפתור, ואז לטעון כי הודעת השגיאה הצפויה מופיעה כאשר שדה ריק:
import { render, fireEvent, screen } from '@testing-library/react-native';
import LoginScreen from '../screens/LoginScreen';
describe('LoginScreen', () => {
it('shows validation error when email is empty on submit', () => {
render(<LoginScreen />);
const emailInput = screen.getByPlaceholderText('Email');
const submitButton = screen.getByRole('button', { name: 'Log In' });
// Leave email empty, fill in password
fireEvent.changeText(screen.getByPlaceholderText('Password'), 'myPassword123');
fireEvent.press(submitButton);
expect(screen.getByText('Please enter your email address')).toBeTruthy();
});
});
בדיקה זו מאשרת כי הרכיב לאכוף את חוקי אימות כאשר המשתמש מנסה להגיש טופס לא שלם.זה לא ללעג פונקציות פנימיות או לדאוג לגבי פרטי היישום של ספריית אימות ו-#8212; הוא בוחן את ההתנהגות הפונה למשתמש.
היתרונות של בדיקות אינטגרציה
- (FLT:0)Catches אינטראקציה באגים 1 ו-#8211; גלה בעיות שרק פני השטח כאשר מרכיבים מתקשרים, כגון מטפלים לא נכונים עוברים או לא תואמים אירועים.
- (FLT:0) אמון גבוה יותר מאשר יחידות בדיקות לבד 1 ו-#8211; מבחנים ליחידות עבור פונקציות בודדות אינם מבטיחים כי פונקציות אלה פועלות יחד כראוי.
- (FLT:0) מהירות ומציאותיות (FLT:1 ו-#8211; בדיקות אינטגרציה איטיות יותר מאשר בדיקות יחידה אך מהר יותר מאשר בדיקות E2E, תוך השתלטות על קרקע בינונית חשובה בפירמידת המבחן.
בדיקה אחרונה ב-12 במאי 2010. ^ End-to-End Testing: Simulating the Real User Experience
בדיקות קצה מקצה לקצה לוקח את הנוף המקיף ביותר.מבחן E2E משיק את היישום על מכשיר או חיקוי, לנווט באמצעות מסכים, נכנס נתונים, ואימות כי היישום מתנהג כמו משתמש אמיתי צפוי. בדיקות אלה לממש את הערימה המלאה, כולל UI, מודולים ילידים, החזרת APIs, אחסון המכשיר.
(FLT:0)DetoxigtureFLT:1 הוא המסגרת המובילה של בדיקות E2E עבור React Native. Built by Wix, Detox תוכנן במיוחד עבור React Native ומספק יכולות בדיקות בתיבת דואר אפור.הוא מספק בדיקות על מכשיר (אמיתי או מחק), מסונכרן עם מחזורי האנימציה והרשת של האפליקציה, ומציע API נקי לאינטראקציות של משתמשים אחרים הוא אפשרות: LT2, אך לא ניתן לבצע בדיקות סלולריות, אך ורק יישומים היברידיים, אך ורקודים, אך ורק תכונות של שימושיות ומכשירים, אך ורקודים, הם יכולים לספק ממשקים, אך ורקודים, אך ורק תכונות של שימושיים, הם כוללים יותר, אך ורק תכונות של יישומים היברידיים, אשר הם כוללים יותר.
מה ל- E2E מבחן ב- React Native
- (FLT:0) מסעות משתמשים ויזואליים 1 – יצירת חשבון, חיפוש מוצר, צ'קאאוט זרימה, עדכוני פרופיל.
- (ב) ⁇ :0) ⁇ וקישור עמוק ל- 1 (ו-#8211) , ודא כי ניתוק הודעה על קישורים עמוקים למסך הנכון.
- (ב) [ה]ההתנהגות הרשמית של ה- 1 ו-#8211; האם התוספת מטפלת באובדן רשת במהלך מבצע מפתח?
- (ב) [ה]ההודעה [ה]:0 [ההודעה] תזרימה 1 ו-#8211; האם קבלת הודעה מובילה למצב המסך הצפוי?
דוגמה מעשית ל- E2E עם Detox
describe('Checkout Flow', () => {
beforeAll(async () => {
await device.launchApp();
});
it('should add item to cart and complete purchase', async () => {
await element(by.text('Add to Cart')).tap();
await expect(element(by.text('Cart (1)'))).toBeVisible();
await element(by.text('Checkout')).tap();
await element(by.id('emailInput')).typeText('[email protected]');
await element(by.id('passwordInput')).typeText('securePassword');
await element(by.text('Log In')).tap();
await element(by.text('Confirm Purchase')).tap();
await expect(element(by.text('Order Confirmed'))).toBeVisible();
});
});
בדיקה זו משיקה את האפליקציה, אינטראקציה עם UI בדיוק כמו משתמש, ומאמת את זרימת הרכישה להשלים בהצלחה. כי Detox מסונכרן עם מחזור ההגשה של האפליקציה, זה יודע מתי אנימציה ובקשות רשת סיימו, צמצום בדיקות flaky.
היתרונות של בדיקות סוף-סוף
- (FLT:0) אמון דמויי ייצור (FLT) 1 ו-#8211; בדיקות E2E מאמתות את היישום בסביבה שמשקף באופן הדוק את מה שהמשתמשים חווים.
- (FLT:0)Catches אינטגרציה פערים של אינטגרציה 1 ו-#8211; בעיות המשתרעות על פני מספר מערכות תת-מערכת, כגון שינוי חוזר המפרק חוזה API הנייד, נתפסות לפני השחרור.
- (FLT:0)Validates צד שלישי אינטגרציה של צד שלישי ההרחבה 1 ו-#8211; שערי תשלום, ספקי אימות ו- SDKs נבדקים בהקשר.
- (FLT:0) מספק רשת בטיחות עבור הודעות עיקריות מהדורות גדולות של תפוצה 1 ו-#8211; הפעלת חבילת E2E מלאה לפני התנגשות גרסה מעניקה לצוות ביטחון.
בניית אסטרטגיית בדיקה לא מבוטלת
טעות נפוצה היא להשקיע יתר במבחן תוך הזנחה של אחרים.הרעיון פירמידת המבחן, פופולרי על ידי מייק קוהן, ממליץ על מספר גדול של בדיקות יחידה מהירות ומבודדות בבסיס, מספר מתון של בדיקות אינטגרציה באמצע, ומספר קטן של בדיקות E2E איטיות ויקרות בחלק העליון.
עבור יישום טיפוסי של React Native, זה יכול לתרגם:
- (FLT:070% יחידות בדיקות סימול 1 ו-#8211; כיסוי פונקציות, קובצים, מקטין ורכיבים פשוטים של מצגות.
- (FLT:0)20% בדיקות אינטגרציה אינטגרציה (FLT:1 – להתמקד על זרימת עבודה ברמת המסך, אימות צורה ואינטראקציה רכיב עם תלות לעג.
- (FLT:0)10% בדיקות מקצה לקצה 1 ו-#8211; הגנה על מסעות המשתמשים הקריטיים ביותר וזרימת הבלוק.
אחוזים אלה הם נקודת התחלה, לא כלל נוקשה. להתאים את התערובת בהתבסס על המורכבות של היישום שלך, גודל הצוות ופרופיל הסיכון.אם האפליקציה שלך מטפלת בעסקאות פיננסיות רגישות, אתה יכול להקצות יותר תקציב לבדיקות E2E עבור זרימת התשלום.
אוטומציה ושילוב CI
בדיקות הופכות יעילות באמת כאשר הן אוטומטיות.בדיקות ריצה באופן ידני הן שגיאות-פרון ואינו מקנה.תתתת את חבילת הבדיקה שלך לתוך צינור אינטגרציה מתמשך (CI) כגון GitHub Actions, Bitrise או CircleCI.
הטמעת CI להפעלת יחידות ובדיקות אינטגרציה על כל בקשה למשיכת מבחנים אלה הם מהירים מספיק כדי להשלים בתוך כמה דקות, מתן משוב מהיר למפתחים.Ral E2E בדיקות עבור מיזוגים לענפים העיקריים או עבור ריצות לילה, שכן הם לוקחים יותר זמן ודורשים יותר תשתיות.
Detox, לדוגמה, יכול לפעול על CI באמצעות סימולטורים אנדרואיד או iOS.שירותים כמו BrowserStack ו- Tablet Labs מציעים חוות מכשירים מבוססי ענן עבור הפעלת בדיקות E2E בקנה מידה מבלי שמירה על מעבדה מקומית.
מלכודות נפוצות וכיצד להימנע מהם
בדיקות פלמי
בדיקות פלקי שעוברות ונכשלות באמון לסירוגין בחבילת המבחן.גורמים נפוצים כוללים בעיות תזמון (התכווות לאנימציה או בקשה לרשת להשלים), מדינה משותפת בין בדיקות, והסתמכות על שירותים חיצוניים. השתמש בסינתזה הבנויה של Detox, להימנע שיתוף מצב מוליד, ולעג API חיצוני במבחנים להפחתה של השחיקה.
מידע על יישום
בדיקות שפורצות כאשר אתה מספק קוד פנימי (ללא שינוי התנהגות) הן דגל אדום. RNTL מונע בדיקות מצב פנימי או רכיב פנימי ישירות. במקום זאת, לבדוק מה המשתמש רואה ומתקשר עם.זה הופך את הבדיקות ליותר יעילות ובעלות ערך.
Over-Mocking
ייבוש יותר מדי תלות יכול ליצור תחושה כוזבת של אבטחה.אם אתה מלגע את שכבת ה- API שלך, אתה לא בודק את השילוב בין האפליקציה שלך לבין הפדרל האחורי האמיתי.
התעלמות מהתנהגות מודול אינדיאני
תגובה של גשרים Native JavaScript וקוד Native. כמה באגים רק על פני השטח על מכשירים אמיתיים. בעוד בדיקות E2E על חיקויים לתפוס בעיות רבות, הפעלת תת-קבוצה של בדיקות קריטיות על מכשירים פיזיים לפני השחרור היא תרגול חכם.
כלים ו- Ecosystem summary
- (ב) [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0)React Native Testingmia LibraryFLT:1 – בדיקות שילוב ברמה גבוהה עם ממשק API ממוקד משתמשים.
- (ב) ,0) ,DetoxentiFLT:1 ו-#8211; בדיקות תיבת אפור-box E2E המיועדות במיוחד עבור React Native.
- (ב) [13] ,0 נספח: 1 ו-#8211; מסגרת בדיקות ג'נרי E2E לצרכים חוצה פלטפורמות.
- (FLT:0MSW (Mock Service Worker)cioFLT:1 ו-#8211; API לעג לבדיקות אינטגרציה ששומרות על קוד הבדיקה קרוב לטיפול אמיתי.
- (ב) [13] כלי ענישה (ב- 10) ; כלי וויכוח שיכול לעזור לאבחן מדוע בדיקות נכשלות במכשיר.
מסקנה
בדיקת React Native אינה פעילות יחידה, אלא מבחנים חד-צדדיים נותנים לך משוב מהיר וממוקד על לוגיקה מבודדת.שילוב בדיקות כי רכיבים עובדים יחד בתרחישים ריאליים. End-to-end סימולציה של מסעות משתמשים אמיתיים ותופסים בעיות המשתרעות על פני כל הערימה. על ידי שילוב כל שלושת הסוגים ושילוב אותם לתוך הצינור שלך, אתה בונה רשת בטיחות המאפשרת לצוות שלך לנוע במהירות ללא הפסקה של דברים מתחילים עם המסלולים הקריטיים שלך, כמו היישום שלך, כמו פיתוח יעיל יותר, כמו גם כן, כמו גם כן, כמו גם את האפשרות של המוצר שלך.
(ב) לעיין ב[[המאה ה-20]], [[1924]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]