使用Mockingjay无法处理HTTP请求

时间:2019-04-04 16:48:15

标签: swift xcode-ui-testing stub

我试图了解如何编写UI测试,但似乎无法使HTTP存根正常工作。运行测试时,看不到存根中的数据,而是API的数据。

我已经在Xcode 10.2和9.4.1中进行了尝试,所以不是因为它不再在Xcode 10中起作用。

我一定在某处做错了,但我不知道该怎么办。

我创建了一个最小的示例,以检查是否是因为我在一个大项目中工作,并且有什么干扰,但是那没有用。

您可以在这里找到整个最小项目:https://github.com/vrwim/TestingTest

在我的viewcontroller中,我有一个简单的tableview设置,该设置执行API调用,并将结果加载到行中。我有一个UI测试目标,该目标具有一个简单的测试设置,该测试使用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*/))
}

编辑:我在运行iOS 12.3 beta和模拟器(而非beta)的iPhone上尝试了此操作。

编辑:也不与OHHTTPStubs一起使用。在示例项目中添加了一个分支OHHTTPStubs

编辑:我在macOS Mojave 10.14.3上,并且我使用Xcode 10.2和9.4.1进行测试。我尝试了运行iOS 12.3的iPhone和运行iOS 12.2的模拟器

编辑:我在我的最小示例中添加了一个失败的测试,如果网络存根正常,该测试应该通过。

1 个答案:

答案 0 :(得分:1)

您不能使用Mockingjay进行UI测试的存根,因为XCUITests在不同的进程中运行。您需要一个启动小型http服务器并以模拟响应的库。例如https://github.com/httpswift/swifterhttps://github.com/envoy/Embassy