iOS / Swift: «Нет такого модуля …» для тестирования пользовательского интерфейса

#ios #swift #cocoapods #ui-testing

#iOS #swift #cocoapods #тестирование пользовательского интерфейса

Вопрос:

Я пытаюсь создать автоматические тесты пользовательского интерфейса для своего приложения iOS. После того, как мне обычно не удавалось заставить это работать в моем существующем приложении, я создал новое с нуля и попробовал там. Кажется, он всегда терпит неудачу, потому что не может импортировать зависимости, которые я установил с помощью Cocoapods.

В настоящее время я использую XCode версии 10.2.1 (10E1001)

Инструкции для репликации:

  1. Запустите XCode, создайте новый проект (приложение с одним просмотром, Swift, модульные тесты и тесты пользовательского интерфейса). Я назвал свой проект UITestProto
  2. Запустите pod init проект.
  3. Добавьте 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
 
  1. Перейдите к настройкам сборки UITestProtoUITests целевого объекта в XCode и установите для параметра «Всегда внедрять стандартные библиотеки Swift» значение $(inherited) :

Встроенные библиотеки swift std

  1. Беги pod install
  2. Откройте проект с помощью UITestProto.xcworkspace
  3. Откройте UITestProtoUITests.swift файл и попробуйте импортировать модуль OHHTTPStubs.
 import XCTest

import Hydra

class UITestProtoUITests: XCTestCase {
...
 

На этом этапе вы должны увидеть сообщение об ошибке:

Нет такого модуля «Гидра»

Я пробовал:

  1. добавление @testable import UITestProto , потому что мне приходилось делать это для моих модульных тестов
  2. Убедитесь, что для параметра «Включить возможность тестирования» в «Настройках сборки» установлено значение «Да»

И я очистил папку сборки и закрыл / открыл 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.