Тестирование для представленного ViewController с GHUnit

После нажатия кнопки UIImagePickerController отображается как контроллер модального представления со следующим кодом:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
[self presentViewController:imagePicker animated:YES completion:nil];

Он отлично работает в симуляторе и на устройстве, но я хочу добавить для него модульный тест (с использованием GHUnit) и пытаюсь проверить, что представленный ViewController не равен нулю.

Однако когда я запускаю тест, на консоль выводится приведенное ниже предупреждение. Кто-нибудь знает, как обойти это, чтобы я мог проверить это правильно?

Warning: Attempt to present <UIImagePickerController: 0xab5e990> on <UINavigationController: 0xab5a790> whose view is not in the window hierarchy!

Кстати, я уже установил shouldRunOnMainThread, чтобы возвращать YES для этого конкретного тестового файла.

1 ответ

Во время модульных тестов ваш ViewController не отображается в окне, поэтому он не может отображать других координаторов. Вам необходимо создать UIWindow, например, в методе настройки и представить UINavigationController в окне вашего теста.

      final class YourTest: XCTestCase {

    private var window: UIWindow!

    override func setUp() {
        super.setUp()

        window = UIWindow()
    }

    override func tearDown() {
        window = nil
        super.tearDown()
    }

    func testSomething() {
        let controller = YourCustomController()
        window.rootViewController = controller
        window.makeKeyAndVisible()

        controller.callSomeMethod()
        ...
    }

    ...
}
Другие вопросы по тегам