当测试包含HTTP请求时,Quickspec测试永远不会成功执行

时间:2018-09-10 23:06:41

标签: swift unit-testing alamofire quick-nimble

我目前正在为我正在研究的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())
                }
            }
        }
    }
}

只要我运行它,测试就会立即通过。即使有:

1)我的getOrderbook实例的方法Kraken中的一个断点。 2)nilorderbook语句中使用的expect变量中返回。

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请求上方时,该断点确实被触发。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您正在传递nil上的onCompletion作为参数。那就是为什么总是以零作为回应。尝试传递有效的参数值而不是nil

例如:

onCompletion(err, params)