Заглушка HTTP-запросов с Mockingjay не работает - PullRequest
5 голосов
/ 04 апреля 2019

Я пытаюсь понять, как писать тесты пользовательского интерфейса, но не могу заставить работать HTTP-заглушку.Когда я запускаю тест, я не вижу данные из заглушки, но данные из API.

Я пробовал это в Xcode 10.2 и 9.4.1, так что это не потому, что он больше не работаетв Xcode 10.

Я, должно быть, где-то что-то делаю не так, но не могу понять, что.

Я создал минимальный пример, чтобы проверить, было ли это, потому что я работал вбольшой проект и что-то мешало, но это не сработало.

Вы можете найти весь минимальный проект здесь: https://github.com/vrwim/TestingTest

В моем viewcontroller у меня есть простая установка tableview, которая выполняетВызов API и загрузка результата в строки.У меня есть цель тестирования пользовательского интерфейса с простой настройкой теста, которая использует Mockingjay для заглушки HTTP-запроса.

Мой код вызова API:

func callSimpleAPI(completionHandler: @escaping ([Patient]?, Error?) -> ()) {
    let url = URL(string: "https://pastebin.com/raw/3PusWbw6")!

    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        DispatchQueue.main.async {
            guard let data = data else {
                completionHandler(nil, error!)
                return
            }

            do {
                let patientResponse = try JSONDecoder().decode(TherapistPatientResponse.self, from: data)
                completionHandler(patientResponse.patients, nil)
            } catch {
                completionHandler(nil, error)
            }
        }
    }
    task.resume()
}

И мой код тестирования:

override func setUp() {
    let app = XCUIApplication()
    app.launch()

    stub(everything, json(/*A json representation of the API response that I want to see*/))
}

Редактировать: я пытался сделать это на своем iPhone с iOS 12.3 beta и симулятором (не бета).

Edit: Также не работает с OHHTTPStubs.Добавил ветку OHHTTPStubs в пример проекта.

Редактировать: Я нахожусь на MacOS Mojave 10.14.3, и я использовал Xcode 10.2 и 9.4.1 для тестирования.Я попробовал свой iPhone с iOS 12.3 и симулятором с iOS 12.2

Редактировать: я добавил в мой минимальный пример неудачный тест, который должен пройти, если работает сетевая заглушка.

1 Ответ

1 голос
/ 08 апреля 2019

Вы не можете заглушки для тестов пользовательского интерфейса, используя Mockingjay, так как XCUITests работают в другом процессе. Вам нужна библиотека, которая запускает небольшой http-сервер и отвечает вашим издевательством. Например https://github.com/httpswift/swifter или https://github.com/envoy/Embassy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...