ios - اختبار وحدة Xcode مع Cocoapods



unit-testing xctest (8)

كنت أضرب رأسي بجدار مع هذا خلال الأيام القليلة الماضية ولكن على الرغم من عمليات البحث المتعددة من Google / SO / Github ، لا يمكنني إيجاد حل للمشكلات التي أواجهها!

كل ما أحاول القيام به هو إنشاء بعض اختبارات الوحدات لتطبيقي والتي تستخدم قرون Firebase.

أنا أستخدم Xcode 7.3.1 و Cocoapods 1.0.1. تحديث: تبقى المشكلة مع Xcode 8.0

مع هذا podfile:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

target 'MyApp' do
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'

    target 'MyAppTests' do
        inherit! :search_paths
    end
end

في صفي XCTest أحصل عليها

مفقود الوحدة النمطية المطلوبة "Firebase"

خطأ في @testable import MyApp

بالتناوب مع هذا podfile:

platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!

def common_pods
    pod 'SwiftyTimer'
    pod 'Firebase'
    pod 'Firebase/Auth'
    pod 'Firebase/Database'
    pod 'Firebase/Storage'
end

target 'MyApp' do
    common_pods
end

target 'MyAppTests' do
    common_pods
end

تصنع الاختبارات ولكن وحدة التحكم الخاصة بي مليئة بالتحذيرات على سبيل المثال:

يتم تطبيق فئة <-FirebaseClassName-> في كل من ... MyApp ... و ... MyAppTests ... سيتم استخدام أحدهما. أي واحد غير معروف


  1. حدد إعداد وحدة اختبار الهدف.
  2. انتقل إلى إعدادات البناء.
  3. ابحث عن مسارات البحث في الرأس.
  4. أضف هذه القيمة $ (SRCROOT) / السنفات مع العودية ، ثم Xcode سوف يحل المسار بالنسبة لك.

Example


أضف "$ {PODS_ROOT} / Firebase / Core / Sources" إلى هدف الاختبارات فقط ضمن إعدادات البناء -> مسارات البحث في الرأس


ثلاث خطوات قبل أن أتمكن من الحصول على هذا العمل:

CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0

الخطوة 1: تأكد من إضافة كتلة الهدف التالية في podfile الخاص بك.

# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'

target 'TIMII' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

# Pods for TIMII
pod 'Firebase/Core'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'

    target 'TIMIITests' do
        inherit! :search_paths
        pod 'Firebase/Core'
    end

end

الخطوة 2: ضمن علامة التبويب YourAppTests Project Navigator Build Settings. ابحث عن صف مسار البحث في رأس الصفحة وأضفه إلى تصحيح السطر التالي

$ (موروثة) $ {PODS_ROOT} / Firebase / Core / Sources

الخطوة 3: في التشغيل الطرفي:

جراب التحديث


جربت كل ما سبق وواجهت العديد من الأخطاء المختلفة ، بدءًا من Missing required module 'Firebase' ، ثم حصلت على "Class ... is implemented in both ... " أو مشاكل رابط إذا حاولت إضافة Firebase Pods إلى الاختبار الخاص بي استهداف.

كان الحل الذي نجح بالنسبة لي هو:

  1. قم بإزالة هدف الاختبار بالكامل من Podfile وقم بتشغيل "pod update" لضمان تزامن مشروع XCode.
  2. افتح "إعدادات الإنشاء" في هدف الاختبار الخاص بي وقم بتحديث مسارات البحث في الرأس لتشمل العناصر الثلاثة التالية فقط:
    • $(inherited) non-recursive
    • $(SRCROOT)/Pods/Headers/Public recursive
    • $(SRCROOT)/Pods/Firebase recursive

في هذه المرحلة ، قم بتنظيف مجلد الإنشاء ، ثم إعادة البناء ، ثم إعادة تشغيل الاختبارات التي أجريت لي. أمل أن هذا يساعد شخصاما!


كان الحل بالنسبة لي هو تحديث cocoapods إلى الإصدار 1.1.0.rc.2.

sudo gem install cocoapods --pre


كان لدي مشكلة مماثلة. صيغت بصيغة سؤالك ، قمت بنسخ محتويات MyApp.<configuration>.xcconfig ملف MyApp.<configuration>.xcconfig إلى MyAppTests.<configuration>.xcconfig ملف MyAppTests.<configuration>.xcconfig . قمت بتنظيف وبناء الاختبارات ، وأنها عملت.


كما ذكرت مشكلة حول Header Search Paths بعد تثبيت CocoaPods.

لدي مشروع بأهداف متعددة حيث يتم تضمين "Firebase" pod في وحدة منفصلة ، لنفترض MyProject-Shared . جراب Firebase في "Podfile" مثبت فقط للهدف "MyProject-Shared". لا يمكن تجميع الوحدات الأخرى التي تريد استخدام "MyProject-Shared" نظرًا لحدوث خطأ:

مفقود الوحدة النمطية المطلوبة "Firebase"

كانت الحيلة في حالتي هي إضافة مسار بحث العنوان التالي المفقود في إعدادات الإنشاء الخاصة بكل هدف والرجوع إلى Analytics-Framework :

"${PODS_ROOT}/Firebase/CoreOnly/Sources"

يرجى الاطلاع على الصورة أدناه:

نأمل أن يوفر وقتك.


يتم تسجيل المشكلة في مشروع firebase هنا:

https://github.com/firebase/firebase-ios-sdk/issues/58

هناك حل بديل:

أضف "$ {PODS_ROOT} / Firebase / Core / Sources" إلى هدف الاختبارات فقط ضمن إعدادات البناء -> مسارات البحث في الرأس

ولكن تم إصلاح ذلك أيضًا من خلال الترقية إلى CocoaPods 1.4.0 أو إصدار أحدث ، وهو حل أفضل.

في الوقت الذي أكتب فيه (نوفمبر 2017) لا يزال الإصدار 1.4.0 من cocoapods في مرحلة تجريبية ، لذلك لتثبيته تحتاج إلى طلب الإصدار التجريبي بشكل صريح:

gem install cocoapods --pre

هذا ثم القيام pod install حل مشكلة تشغيل الاختبارات الخاصة بي.





xctest