使用 Mockingjay 存根 HTTP 请求不起作用

Stubbing HTTP requests with Mockingjay not working

我想了解如何编写 UI 测试,但我似乎无法让 HTTP 存根工作。当我 运行 测试时,我看不到来自存根的数据,而是来自 API.

的数据

我在Xcode 10.2和9.4.1都试过了,所以不是因为它在Xcode 10.

我一定是哪里做错了,但我不知道是什么。

我已经创建了一个最小的示例来检查它是否是因为我在一个大项目中工作并且有一些干扰,但这没有用。

在我的 viewcontroller 中,我有一个简单的表视图设置,它执行 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*/))
}

编辑:我在我的 iPhone 运行ning iOS 12.3 测试版和模拟器(非测试版)上试过了。

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

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

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