DVR
DVR是一个简单的Swift框架,它基于VCR为iOS、watchOS和OS X创建假的NSURLSession
请求。
易用的依赖注入是主要的设计目标。API与NSURLSession
相同。DVR.Session
是NSURLSession
的子类,因此您可以在任何地方将其用作直接替换。(目前仅支持数据任务。)
用法
let session = Session(cassetteName: "example")
let task = session.dataTask(with: request) { data, response, error in
// Do something with the response
}
// Nothing happens until you call `resume` as you'd expect.
task.resume()
这将回放example
磁带。完成处理程序与通常的方式完全相同。在此示例中,DVR将在您的测试包中查找名为example.json
的磁带。
如果请求的记录缺失,它将记录并保存到磁盘上。保存到磁盘后,它将用记录文件的路径进行断言。这会导致测试停止,以便您可以向测试目标添加磁带并重新运行测试。
记录多个请求
默认情况下,DVR会话仅记录一个请求。如果通知DVR何时开始和停止记录,您可以在同一个磁带上记录多个请求。
let session = Session(cassetteName: "multiple")
// Begin recording multiple requests
session.beginRecording()
session.dataTask(with: URLRequest(url: URL(string: "http://apple.com")!)) { data, response, error in
// Do something with the response
session.dataTask(with: URLRequest(url: URL(string: "http://google.com")!)) { data, response, error in
// Do something with the response
}.resume()
// Finish recording multiple requests
session.endRecording() {
// All requests have completed
}
}.resume()
如果在调用会话的第一次请求中未调用beginRecording
和endRecording
,DVR将为您调用这些。在您将所有请求提交给会话后,可以立即调用endRecording
。当所有请求都完成后,将调用endRecording
接受的可选完成块。这是一个满足您设置的XCTest期望或在网络请求结束后完成其他事物的良好位置。