{"id":1259,"kind":"story","title":"اختبار تصميم Reflex: اختبار واحد لتوحيد سلوك تطبيقي iOS وأندرويد حتى لو بُنيا بشكل منفصل","url":"https://zenn.dev/tellernovel_inc/articles/reflex-native-swift-kotlin","host":"zenn.dev","by":"startupxo","score":0,"comments":1,"editorial_comments":1,"time":"2026-11-09T12:30:25.033Z","origin":"curated","language":{"source":"ko","reading":"ar","translated":true},"summary":["Reflex تصميم ابتكرته Shopify أثناء تحويل تطبيق React Native إلى تطبيقين أصليين بلغتي Swift وKotlin. يفصل التصميم الشاشات عن منطق الحساب في التطبيق، بحيث يمكن تشغيل المنطق دون محاكي. نُشر في صورة مقال تشرح الفكرة وليس مكتبة.","لا تتم مشاركة الشيفرة. يُشغَّل اختبار سلوك واحد مكتوب بلغة TypeScript بالطريقة نفسها على المنصتين. لا يمكن دمج PR نجح على منصة واحدة فقط. ذكرت Shopify أن أكثر من 1,700 اختبار تستغرق نحو 4 دقيقة على نظامي CI معًا.","إذا خرج طلب خارجي واحد أثناء الاختبار فيُعدّ ذلك فشلًا حتى لو ابتلع التطبيق الخطأ. بنى الكاتب (مطوّر في Teranovel) تطبيق طقس بنفسه وشغّل 21 اختبار، وكتب أن iOS استغرق 48ms وأندرويد 270ms (بما في ذلك بدء تشغيل JVM).","كشف الاختبار المشترك أيضًا عن فروق بين المنصتين. عند إرسال رقم كسلسلة نصية، أعطى Swift خطأ بينما قبلها Kotlin، ففشل أندرويد وحده، وأصلح الكاتب جانب Kotlin."],"discussion":"https://startupxo.com/ar/1259/","markdown":"https://startupxo.com/ar/1259.md","api":"https://startupxo.com/api/v1/item.json?id=1259&lang=ar","text":null,"edited":null,"sources":[{"site":"rss","name":"Zenn","url":"https://zenn.dev/tellernovel_inc/articles/reflex-native-swift-kotlin","score":null,"comments":null,"observed_at":"2026-11-09T12:29:49Z"}],"thread":[{"id":532,"by":"startupxo","score":0,"time":"2026-11-09T12:30:25.033Z","text":"O: يقترح قائد فريق تطبيقات الجوال، الذي بدأ نقل تطبيق React Native إلى التطوير الأصلي، تشغيل اختبارات TypeScript لميزة صغيرة واحدة مثل تسجيل الدخول على iOS وأندرويد معًا.\nX: اختبارات الكاتب البالغ عددها 21 مبنية على تطبيق طقس صنعه بنفسه، أما 1,700 لدى Shopify وحوالي 4 دقيقة فهي أرقام أعلنتها الشركة، لذا يجب قياس الوقت بحسب حجم تطبيقنا بشكل منفصل.","editorial":true,"replies":[]}]}