当测试包含 HTTP 请求时,快速规范测试永远不会成功执行



我目前正在为我正在开发的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( 我的Kraken实例的方法getOrderbook中的断点。 2(nilexpect语句中使用的orderbook变量中返回。

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

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

谢谢。

我认为您正在传递nil作为onCompletion上的参数值。这就是为什么总是接收 nil 作为响应。尝试传递有效的参数值而不是nil

前任:

onCompletion(err, params)

最新更新