【问题标题】:Stubbing HTTP requests with Mockingjay not working使用 Mockingjay 存根 HTTP 请求不起作用
【发布时间】:2019-04-04 16:48:15
【问题描述】:

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

我已经在 Xcode 10.2 和 9.4.1 中尝试过,并不是因为它不再适用于 Xcode 10。

我一定在某处做错了什么,但我不知道是什么。

我创建了一个最小的示例来检查是否是因为我在一个大项目中工作并且受到了干扰,但这不起作用。

在我的视图控制器中,我有一个简单的 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 测试版和模拟器(非测试版)的 iPhone 上进行了尝试。

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

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

【问题讨论】:

    标签: swift xcode-ui-testing stub


    【解决方案1】:

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

    【讨论】:

    • 我现在用 Swifter 测试过,确实是这个问题。谢谢!我没有意识到单元测试和 UI 测试彼此如此不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2016-10-23
    • 2018-04-24
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多