首页 > 解决方案 > 当测试包含 HTTP 请求时,Quickspec 测试永远不会成功执行

问题描述

我目前正在为我正在开发的 OSX 框架的一小部分编写测试。测试是使用包QuickNimble. 测试本身非常基础:

class OrderbookTestKraken: QuickSpec {
    let kraken = Kraken()

    override func spec() {
        let coin = Coin(name: "DOGE", ask: 0.0, bid: 0.0, last: 0.0, bidSize: 0.0, askSize: 0.0)
        describe("When an order book is requested") {
            it("it should create an orderbook successfully") {
                self.kraken.getOrderbook(coin: coin) { (error, orderbook) in
                    expect(orderbook).notTo(beNil())
                }
            }
        }
    }
}

每当我运行它时,测试立即通过。即使有:

getOrderbook1)我的Kraken实例方法中的断点。2)在语句中使用的变量中nil返回。orderbookexpect

getOrderbook方法如下所示:

func getOrderbook(coin: Coin, onCompletion: @escaping (Error?, Orderbook?) -> Void) {
    Alamofire.request("\(publicApiUrl ?? "")/Depth",
        method: .get,
        parameters: ["pair": "\(coin.name)XBT", "count": 3],
        encoding: URLEncoding.default,
        headers: nil).validate().responseJSON { response in
        // There's a breakpoint here.
        onCompletion(nil, nil)
    }
}

所以,它总是nil在回调中返回,并且有一个未触发的断点,但测试总是成功。当我尝试一些穴居人调试并在请求上方放置一个断点Alamofire时,断点确实被触发了。

这是一些已知问题,还是我正在监督的问题?

谢谢。

标签: swiftunit-testingalamofirequick-nimble

解决方案


我认为您将 anil作为参数值传递给onCompletion. 这就是为什么总是收到 nil 作为响应。尝试传递有效的参数值而不是nil.

前任:

onCompletion(err, params)

推荐阅读