Detox موبائل ایپلیکیشنز کی gray-box E2E جانچ کے لیے ایک فریم ورک ہے، جسے Wix ٹیم نے خاص طور پر React Native پروجیکٹس کے لیے بنایا ہے۔ black-box طریقوں کے برعکس، Detox کو ایپلیکیشن کی داخلی حالت تک رسائی حاصل ہے، جو دستی ٹائم آؤٹ کے بغیر خود بخود مطابقت پذیری کی اجازت دیتا ہے۔ Wix Engineering, 2026 کے مطابق، خودکار مطابقت پذیری روایتی توقف کے مقابلے میں ٹیسٹ چلانے کے وقت کو 40% تک کم کر دیتی ہے۔
اہم نکات
Detox موبائل ایپلیکیشنز کے اینڈ ٹو اینڈ (E2E) ٹیسٹنگ کے لیے ایک فریم ورک ہے، جسے Wix نے 2017 میں تیار کیا تھا۔ یہ React Native پروجیکٹس کے لیے ڈیزائن کیا گیا ہے لیکن iOS اور Android پر مکمل طور پر نیٹیو ایپلیکیشنز کو بھی سپورٹ کرتا ہے۔ Detox gray-box ماڈل پر کام کرتا ہے، جس کا مطلب ہے کہ اسے ایپلیکیشن کے داخلی میکانزم تک رسائی حاصل ہے۔
Detox اور Appium یا Calabash کے درمیان بنیادی فرق ایپلیکیشن کے ساتھ خودکار مطابقت پذیری ہے۔ فریم ورک اگلی کارروائی کرنے سے پہلے اینیمیشنز، نیٹ ورک کی درخواستوں اور ایونٹ پروسیسنگ کے مکمل ہونے کا انتظار کرتا ہے۔ یہ Thread.sleep() یا waitForElement کی ضرورت کو مکمل طور پر ختم کر دیتا ہے، جو ٹیسٹ کو سست کر دیتے ہیں۔
Detox iOS (XCTest اور Xcode کے ذریعے) اور Android (Espresso اور UI Automator کے ذریعے) کو سپورٹ کرتا ہے۔ React Native ایپلیکیشنز کے لیے، Fabric اور پرانے آرکیٹیکچر کے لیے مکمل سپورٹ فراہم کی جاتی ہے۔ iOS پر، ٹیسٹ سمیلیٹر پر چلتے ہیں؛ Android پر، ایمولیٹر یا حقیقی ڈیوائس پر۔
Detox آرکیٹیکچر تین اہم اجزاء پر مشتمل ہے: Detox CLI، Detox ٹیسٹ رنر اور Detox Native Driver۔ Detox CLI ایپلیکیشن بلڈ، انسٹالیشن اور ٹیسٹ پر عملدرآمد کا انتظام کرتا ہے۔ ٹیسٹ رنر (Jest یا Mocha) ٹیسٹ منظرناموں کو انجام دیتا ہے اور WebSocket کے ذریعے ایپلیکیشن کے ساتھ بات چیت کرتا ہے۔
Gray-box ٹیسٹنگ کا مطلب ہے کہ Detox کو ایک نیٹیو برج کے ذریعے ایپلیکیشن کی داخلی حالت تک رسائی حاصل ہے۔ فریم ورک نیٹ ورک کی درخواستوں، اینیمیشنز، ٹائمرز اور آپریشن قطار کی نگرانی کرتا ہے۔ جب تمام قطاریں خالی ہوتی ہیں، Detox ایپلیکیشن کو اگلے مرحلے کے لیے تیار سمجھتا ہے۔
مطابقت پذیری ایپلیکیشن کے مین تھریڈ کی نگرانی پر مبنی ہے۔ Detox اس وقت تک انتظار کرتا ہے جب تک تمام اینیمیشنز مکمل نہیں ہو جاتیں، HTTP درخواستیں جوابات واپس نہیں کر دیتیں اور ایونٹ ہینڈلرز عملدرآمد ختم نہیں کر دیتے۔ اگر کوئی ٹیسٹ لامتناہی اینیمیشن کی وجہ سے پھنس جاتا ہے، تو آپ کسی مخصوص کوڈ بلاک کے لیے دستی طور پر مطابقت پذیری غیر فعال کر سکتے ہیں۔
// مسئلہ والے حصے کے لیے مطابقت پذیری غیر فعال کرنا
await device.disableSynchronization();
// لمبی اینیمیشن والی کارروائی
await element(by.id('loader')).swipe('down');
await device.enableSynchronization();
Detox کی تنصیب npm یا yarn کے ذریعے پیکیج شامل کرنے سے شروع ہوتی ہے۔ تنصیب کے بعد، آپ کو ایک کنفیگریشن فائل .detoxrc.js بنانے کی ضرورت ہے، جو ہر پلیٹ فارم کے لیے بلڈ اور رن سیٹنگز بیان کرتی ہے۔ Detox iOS کے لیے اپنی بلڈ قسم کا استعمال کرتا ہے، جو Xcode کنفیگریشن پر مبنی ہے۔
ترتیب میں ایپلیکیشن کا راستہ (app)، بلڈر کی قسم (build)، بلڈ آرگیومنٹس اور ڈیوائس کی ترتیبات (device) شامل ہیں۔ iOS کے لیے appleSimulator استعمال ہوتا ہے، Android کے لیے androidEmulator۔ آپ سمیلیٹر کی زبان یا علاقہ جیسے لانچ آرگیومنٹس بھی مخصوص کر سکتے ہیں۔
// .detoxrc.js — کنفیگریشن مثال
module.exports = {
testRunner: { args: { '$0': 'jest', config: 'e2e/config.json' } },
apps: {
'ios.debug': { type: 'ios.app', build: 'xcodebuild ...' },
'android.debug': { type: 'android.apk', build: 'cd android && ./gradlew ...' }
},
devices: {
simulator: { type: 'ios.simulator', device: { type: 'iPhone 15' } },
emulator: { type: 'android.emulator', device: { avdName: 'Pixel_4_API_34' } }
}
};
ترتیب کے بعد، درج ذیل کمانڈز دستیاب ہیں: detox build — ٹیسٹ فلیگ کے ساتھ ایپلیکیشن بناتا ہے، اور detox test — ٹیسٹ چلاتا ہے۔ Detox --workers فلیگ کا استعمال کرتے ہوئے متعدد ڈیوائسز پر متوازی عملدرآمد کو سپورٹ کرتا ہے۔
Detox ٹیسٹ JavaScript یا TypeScript میں ایک API کا استعمال کرتے ہوئے لکھے جاتے ہیں جو عنصر تلاش (matchers) اور اعمال (actions) پر مبنی ہے۔ Matchers آپ کو شناخت کنندہ، متن، قسم یا اسکرین پر پوزیشن کے ذریعے عنصر تلاش کرنے کی اجازت دیتے ہیں۔ اعمال ٹیپ، ٹیکسٹ ان پٹ، سوائپ اور اسکرول انجام دیتے ہیں۔
ایک عام ٹیسٹ اس ترتیب پر عمل کرتا ہے: عنصر تلاش کریں → عمل کریں → نتیجہ تصدیق کریں۔ تصدیق کے لیے، expect API عنصر کی موجودگی، مرئیت یا متن کے لیے matchers کے ساتھ استعمال ہوتی ہے۔ Detox Jest کے ساتھ انضمام کے ذریعے describe/it نحو کو سپورٹ کرتا ہے۔
describe('Login flow', () => {
beforeEach(async () => {
await device.reloadReactNative();
});
it('should log in with valid credentials', async () => {
await element(by.id('emailInput')).typeText('user@test.com');
await element(by.id('passwordInput')).typeText('password123');
await element(by.id('loginButton')).tap();
await expect(element(by.id('homeScreen'))).toBeVisible();
});
});
Detox تمام مقبول اشاروں کو سپورٹ کرتا ہے: tap، longPress، swipe، scroll، pinch، multiTap۔ scroll کے لیے آپ سمت، رفتار اور رکنے کی پوزیشن مخصوص کر سکتے ہیں۔ یہ پیچیدہ منظرناموں جیسے pull-to-refresh یا carousels کی جانچ کی اجازت دیتا ہے۔
Detox مشہور CI سسٹمز کے ساتھ اچھی طرح ضم ہوتا ہے: GitHub Actions، CircleCI، Bitrise اور Jenkins۔ CI میں چلانے کے لیے، آپ کو ایک ورچوئل iOS سمیلیٹر (GUI کے بغیر) اور ہارڈویئر ایکسلریشن کے ساتھ Android ایمولیٹر ترتیب دینے کی ضرورت ہے۔ Detox ناکام ٹیسٹوں کے تجزیہ کے لیے آرٹیفیکٹس — اسکرین شاٹس اور لاگز — فراہم کرتا ہے۔
CI میں ٹیسٹ چلانے کی رفتار بڑھانے کے لیے، --workers فلیگ کے ساتھ شارڈنگ (متوازی بنانا) استعمال کرنے کی سفارش کی جاتی ہے۔ Detox خود بخود متعدد سمیلیٹرز میں ٹیسٹ فائلوں کو تقسیم کرتا ہے۔ بلڈ وقت کو کم کرنے کے لیے رنز کے درمیان ایپلیکیشن بلڈز کو کیش کرنا بھی مفید ہے۔
# GitHub Actions — iOS پر Detox چلانا
- name: Install Dependencies
run: npm ci
- name: Build Detox App
run: npx detox build --configuration ios.sim
- name: Run Detox Tests
run: npx detox test --configuration ios.sim --workers 2
timeout-minutes: 30
مستحکم اور تیز E2E ٹیسٹوں کے لیے، کئی اصولوں پر عمل کرنے کی سفارش کی جاتی ہے۔ sleep() سے پرہیز کریں — Detox خودکار مطابقت پذیری فراہم کرتا ہے، اور واضح تاخیر صرف ٹیسٹوں کو سست کرتی ہے اور انہیں غیر مستحکم بناتی ہے۔ اگر وقت کے مسائل کی وجہ سے کوئی ٹیسٹ ناکام ہوتا ہے، تو پہلے چیک کریں کہ مطابقت پذیری غیر فعال ہے یا نہیں۔ ٹیسٹوں کو فیچر کے مطابق گروپ کرنا اور انہیں آزادانہ طور پر چلانا بھی مفید ہے — یہ ناکامی کی وجہ تلاش کرنا آسان بناتا ہے۔
Detox حالت کے انتظام کے لیے کئی device طریقے فراہم کرتا ہے: device.reloadReactNative() بنڈل کو دوبارہ لوڈ کرتا ہے، device.launchNewApp() ایپلیکیشن کو نئے پیرامیٹرز کے ساتھ لانچ کرتا ہے، device.sendToHome() ایپلیکیشن کو چھوٹا کرتا ہے۔ device.setURLBlacklist() آپ کو مخصوص URLs کو مطابقت پذیری سے خارج کرنے کی اجازت دیتا ہے، جو تجزیات اور long-polling کنکشنز کے لیے مفید ہے۔
ہر ٹیسٹ کے لیے، ایک الگ تھلگ حالت بنانے کی سفارش کی جاتی ہے۔ device.reloadReactNative() کے ذریعے ایپلیکیشن کو دوبارہ لوڈ کرنے کے لیے beforeEach استعمال کریں۔ مخصوص ڈیٹا کی ضرورت والے ٹیسٹوں کے لیے، سرور پر ڈیٹا تیار کرنے کے لیے فیکٹریاں یا API کلائنٹ بنائیں۔ ٹیسٹوں کے درمیان انحصار سے بچیں — ہر ٹیسٹ آزاد ہونا چاہیے۔
Detox web.element() اور web.invoke() طریقوں کے ذریعے WebView ٹیسٹنگ کو سپورٹ کرتا ہے۔ ویب عناصر کے ساتھ تعامل کرنے کے لیے، by.web](:id، css یا className استعمال ہوتا ہے۔ یہ یاد رکھنا ضروری ہے کہ WebView کو اضافی لوڈنگ وقت درکار ہوتا ہے — اگر مطابقت پذیری کام نہیں کرتی ہے، تو waitFor کا استعمال کرتے ہوئے لوڈنگ انتظار شامل کریں۔
// Detox میں WebView ٹیسٹنگ
const webView = web(by.id('webview'));
await webView.element(by.web.cssSelector('#submit-btn')).tap();
const result = await webView.element(
by.web.cssSelector('.result-text')
).getText();
await expect(result).toEqual('Success');
Detox detox-image-matching پلگ ان کے ذریعے اسکرین شاٹ موازنہ کو سپورٹ کرتا ہے۔ اسکرین شاٹس آپ کو بصری رجعت کا پتہ لگانے کی اجازت دیتے ہیں: منتقل شدہ عناصر، غلط رنگ، گمشدہ آئیکنز۔ مستحکم اسکرین شاٹس کے لیے، اینیمیشنز غیر فعال کریں اور ایک مقررہ سمیلیٹر سائز استعمال کریں۔
سب سے عام Detox مسائل مطابقت پذیری سے متعلق ہیں: لامتناہی اینیمیشنز، لمبی نیٹ ورک درخواستیں یا پھنسے ہوئے ٹائمرز۔ --loglevel trace فلیگ کے ساتھ لاگنگ دکھاتا ہے کہ Detox کن وسائل کا انتظار کر رہا ہے۔ اگر Detox پھنس جاتا ہے تو، مسئلہ والے کوڈ بلاک کے لیے device.disableSynchronization() استعمال کریں۔
iOS سمیلیٹر پر، Detox کو پہلے iphonesimulator کنفیگریشن کے ساتھ xcodebuild کے ذریعے ایپلیکیشن بنانے کی ضرورت ہوتی ہے۔ ایک عام غلطی Debug کے بجائے Release اسکیم کا استعمال ہے، جو ٹیسٹ فلیگ کو غیر فعال کر دیتا ہے۔ Android کے لیے، یقینی بنائیں کہ AVD آپ کی ایپلیکیشن کے ساتھ مطابقت رکھنے والے API کے ساتھ بنایا گیا ہے اور Intel HAXM ایکسلریشن فعال ہے۔ macOS پر CI ماحول کے لیے، macOS رنر کے ساتھ GitHub Actions استعمال کرنا آسان ہے، جہاں Xcode اور سمیلیٹرز پہلے سے انسٹال ہیں۔
اگر ٹیسٹ باقاعدگی سے ٹائم آؤٹ کی وجہ سے ناکام ہوتے ہیں تو، چیک کریں: کیا مطابقت پذیری عالمی طور پر غیر فعال ہے، کیا ایپلیکیشن کوڈ میں صفائی کے بغیر setTimeout یا setInterval استعمال ہو رہے ہیں، اور کیا مین تھریڈ ایک لمبی کارروائی سے مسدود ہے۔ بعض اوقات detoxrc.js میں testRunner.args.jest.$.testTimeout کے ذریعے ٹائم آؤٹ بڑھانے سے مدد ملتی ہے۔ مسئلہ والے علاقوں کو تلاش کرنے کے لیے، Detox ٹریس لاگنگ فعال کریں — یہ دکھاتا ہے کہ فریم ورک اس وقت کن وسائل اور ٹائمرز کا انتظار کر رہا ہے۔
ٹیسٹ چلانے کے بعد، Detox آرٹیفیکٹس بناتا ہے: ناکام ٹیسٹوں کے اسکرین شاٹس، ایپلیکیشن لاگز اور JUnit XML رپورٹس۔ جب کوئی ٹیسٹ ناکام ہوتا ہے تو اسکرین شاٹس خود بخود لیے جاتے ہیں اور مسئلہ کو بصری طور پر پہچاننے میں مدد کرتے ہیں۔ CI کے لیے، آرٹیفیکٹس کلاؤڈ اسٹوریج میں اپ لوڈ کیے جاتے ہیں اور ناکامی کی وجوہات کے تجزیہ کے لیے ویب انٹرفیس کے ذریعے دستیاب ہوتے ہیں۔
اکثر پوچھے گئے سوالات
Detox ایپلیکیشن کی داخلی حالت تک رسائی اور خودکار مطابقت پذیری کے ساتھ gray-box طریقہ استعمال کرتا ہے۔ Appium WebDriver کے ذریعے black-box ماڈل پر کام کرتا ہے اور دستی انتظار کی ضرورت ہوتی ہے۔ React Native پروجیکٹس کے لیے Detox تیز اور زیادہ مستحکم ہے۔
Detox ٹیسٹ JavaScript یا TypeScript میں لکھے جاتے ہیں۔ فریم ورک Jest اور Mocha کے ساتھ ٹیسٹ رنر کے طور پر ضم ہوتا ہے۔ iOS کے لیے نیٹیو انجن Swift میں، Android کے لیے Kotlin اور Java میں لکھا گیا ہے۔
ہاں، Detox iOS (XCTest کے ذریعے) اور Android (Espresso کے ذریعے) پر نیٹیو ایپلیکیشنز کو سپورٹ کرتا ہے۔ تاہم، Detox کا بنیادی صارف React Native ڈیولپرز ہیں، کیونکہ نیٹیو پروجیکٹس کے لیے زیادہ پختہ حل موجود ہیں۔
Detox آرٹیفیکٹس فراہم کرتا ہے: اسکرین شاٹس، ایپلیکیشن لاگز اور HTML رپورٹس۔ مقامی ڈیبگنگ کے لیے، --loglevel trace فلیگ استعمال کریں، اور CI کے لیے، کلاؤڈ اپ لوڈ کے ساتھ خودکار آرٹیفیکٹ کلیکٹر استعمال کریں۔
یہ Detox API کا ایک طریقہ ہے جو ایپلیکیشن کو دوبارہ انسٹال کیے بغیر React Native JavaScript بنڈل کو دوبارہ لوڈ کرتا ہے۔ یہ beforeEach میں ہر ٹیسٹ سے پہلے ایپلیکیشن کی حالت کو ابتدائی اسکرین پر ری سیٹ کرنے کے لیے استعمال ہوتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں