#ios #swift #cocoapods #ui-testing
#iOS #swift #cocoapods #тестирование пользовательского интерфейса
Вопрос:
Я пытаюсь создать автоматические тесты пользовательского интерфейса для своего приложения iOS. После того, как мне обычно не удавалось заставить это работать в моем существующем приложении, я создал новое с нуля и попробовал там. Кажется, он всегда терпит неудачу, потому что не может импортировать зависимости, которые я установил с помощью Cocoapods.
В настоящее время я использую XCode версии 10.2.1 (10E1001)
Инструкции для репликации:
- Запустите XCode, создайте новый проект (приложение с одним просмотром, Swift, модульные тесты и тесты пользовательского интерфейса). Я назвал свой проект
UITestProto
- Запустите
pod init
проект. - Добавьте
HydraAsync
зависимость
Подфайл должен выглядеть следующим образом:
# Uncomment the next line to define a global platform for your project
platform :ios, '12.2'
target 'UITestProto' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for UITestProto
target 'UITestProtoTests' do
inherit! :search_paths
# Pods for testing
end
target 'UITestProtoUITests' do
inherit! :search_paths
# Pods for testing
pod 'HydraAsync'
end
end
- Перейдите к настройкам сборки
UITestProtoUITests
целевого объекта в XCode и установите для параметра «Всегда внедрять стандартные библиотеки Swift» значение$(inherited)
:
- Беги
pod install
- Откройте проект с помощью
UITestProto.xcworkspace
- Откройте
UITestProtoUITests.swift
файл и попробуйте импортировать модуль OHHTTPStubs.
import XCTest
import Hydra
class UITestProtoUITests: XCTestCase {
...
На этом этапе вы должны увидеть сообщение об ошибке:
Нет такого модуля «Гидра»
Я пробовал:
- добавление
@testable import UITestProto
, потому что мне приходилось делать это для моих модульных тестов - Убедитесь, что для параметра «Включить возможность тестирования» в «Настройках сборки» установлено значение «Да»
И я очистил папку сборки и закрыл / открыл XCode после каждого из этих шагов, но по-прежнему не повезло с импортом Hydra.
Примечание: на самом деле я не использую Hydra для тестирования, это просто библиотека, которую я успешно использовал в проектах в прошлом
Ответ №1:
Это связано с проблемой CocoaPods. Предложенный здесь обходной путь помогает мне. Возможно, вам потребуется перестроить проект.
Для дальнейшего использования я отредактировал сообщение:
# Moving the UITests target outside of the main target
# in the Podfile seems to have helped. So now instead of this:
target 'Target' do
use_frameworks!
...
target 'TargetTests' do
inherit! :search_paths
...
end
target 'TargetUITests' do
inherit! :search_paths
...
end
end
## we have this:
target 'Target' do
use_frameworks!
...
target 'TargetTests' do
inherit! :search_paths
...
end
end
target 'TargetUITests' do
inherit! :search_paths
... # all the pods we normally use
end
Благодарности PWrzesinski
Комментарии:
1. После очистки ошибка все еще не исчезла. Я провел тесты, несмотря на ошибку, и он был успешно собран, и тесты пользовательского интерфейса прошли просто отлично. Больше нет ошибки импорта модуля.
2. Сегодня у меня была почти такая же проблема. Я думаю, что Xcode просто медленно устанавливает соединения, как это иногда происходит с новыми классами и т.д. Запуск и создание соответствующих целевых объектов (в моем случае цели модульного тестирования) также сделали свое дело. Смотрите ответ ниже. : )
Ответ №2:
Попробуй это:
platform :ios, '12.2'
target 'UITestProto' do
#some pods for your main target
target 'UITestProtoTests' do
inherit! :search_paths
#pods for your unit tests
end
target 'UITestProtoUITests' do
pod 'HydraAsync'
end
end
И запустите pod deintegrate
и pod update amp;amp; pod install
после этого.
Комментарии:
1. Вы хотите, чтобы я удалил
use_frameworks!
иinherit! :search_paths
для цели тестирования пользовательского интерфейса?2. Я попробовал это, просто удалив
inherit! :search_paths
, но получил тот же результат.
Ответ №3:
Такое же поведение по-прежнему с XCode 12.3 в 2021 году. Для меня это легко исправить, просто запустив тесты один раз.
У меня была такая же проблема с другим модулем, добавленным в модульные тесты или тесты пользовательского интерфейса. В подфайле этот модуль находился в нужном целевом разделе. Поэтому он должен его распознать.
Ошибка исчезла, как только я запустил тесты ( Cmd U
), недостаточно только создать или запустить его, поскольку он не будет пытаться создать что-либо из тестовых целей.
Та же проблема иногда возникает при добавлении нового модуля, класса и т. Д., Но Также исправляется после создания цели propper.