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 या कैरोसेल जैसे जटिल परिदृश्यों के परीक्षण की अनुमति देता है।
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() आपको सिंक्रनाइज़ेशन से कुछ URL को बाहर करने की अनुमति देता है, जो एनालिटिक्स और long-polling कनेक्शन के लिए उपयोगी है।
प्रत्येक परीक्षण के लिए, एक पृथक स्थिति बनाने की अनुशंसा की जाती है। एप्लिकेशन को पुनः लोड करने के लिए device.reloadReactNative() के माध्यम से beforeEach का उपयोग करें। विशिष्ट डेटा की आवश्यकता वाले परीक्षणों के लिए, सर्वर पर डेटा तैयार करने के लिए फ़ैक्टरी या API क्लाइंट बनाएँ। परीक्षणों के बीच निर्भरता से बचें — प्रत्येक परीक्षण स्वतंत्र होना चाहिए।
Detox web.element() और web.invoke() विधियों के माध्यम से WebView परीक्षण का समर्थन करता है। वेब तत्वों के साथ बातचीत करने के लिए, by.web](:id, css या className का उपयोग किया जाता है। यह याद रखना महत्वपूर्ण है कि WebView को अतिरिक्त लोडिंग समय की आवश्यकता होती है — यदि सिंक्रनाइज़ेशन काम नहीं करता है, तो waitFor का उपयोग करके लोडिंग प्रतीक्षा जोड़ें।
// WebView परीक्षण Detox में
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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें