DVR

Version Status Swift Version Carthage compatible Swift Package Manager

DVR 是一个简单的 Swift 框架,用于为 iOS、watchOS 和 OS X 创建伪造的 NSURLSession 请求,它基于 VCR

简单的依赖注入是主要的设计目标。API 与 NSURLSession 相同。DVR.SessionNSURLSession 的子类,因此你可以将其用作任何地方的直接替换。(目前仅支持数据任务。)

用法

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 磁带(cassette)。完成处理程序的工作方式与通常情况下完全相同。在本例中,DVR 将在你的测试 bundle 中查找名为 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()

如果你不调用 beginRecordingendRecording,DVR 将在你向会话发出的第一个请求前后为你调用这些方法。你可以在提交所有请求到会话后立即调用 endRecordingendRecording 接受的可选完成代码块将在所有请求完成后被调用。这是一个实现你已设置的 XCTest expectation 或在网络操作完成后执行其他操作的好地方。