Mockingjay
一个优雅的 Swift 用来模拟 HTTP 请求的库,允许您使用 NSURLConnection
或 NSURLSession
模拟任何 HTTP/HTTPS 请求。这包括来自诸如 Alamofire 和 AFNetworking 的库所做的任何请求。
安装
CocoaPods 是推荐的安装方法。
pod 'Mockingjay'
使用方法
Mockingjay 与 XCTest 完全集成,您只需注册一个存根即可。测试用例结束时将自动卸载。它还可以与Quick 行为驱动开发框架一起工作。
使用 URI 模板进行简单存根,返回给定 JSON 编码结构的响应
let body = [ "user": "Kyle" ]
stub(uri("/{user}/{repository}"), json(body))
uri
函数接受一个URL或路径,该路径可以包含一个URI模板。例如以下内容:
https://github.com/kylef/WebLinking.swift
https://github.com/kylef/{repository}
/kylef/{repository}
/kylef/URITemplate.swift
使用JSON结构模拟特定的HTTP方法
let body = [ "description": "Kyle" ]
stub(http(.put, uri: "/kylef/Mockingjay"), json(body))
模拟所有请求并返回错误
let error = NSError()
stub(everything, failure(error))
使用特定的HTTP响应模拟
stub(everything, http(status: 404))
请注意,http
构建器也可以接受一组头信息和正文。
模拟
Mockingjay中的stub
方法接受两个函数或闭包,一个是匹配请求,另一个是构建响应。这允许您轻松扩展语法以提供自己的特定函数。
stub(matcher, builder)
匹配器
匹配器就是一个函数,它接受一个请求并返回一个布尔值,以指示模拟是否与请求匹配。
func matcher(request:URLRequest) -> Bool {
return true // Let's match this request
}
stub(matcher, failure(error))
构建器
构建器与匹配器非常相似,它接受一个请求,并返回成功或失败的响应。
func builder(request: URLRequest) -> Response {
let response = HTTPURLResponse(url: request.url!, statusCode: 200, httpVersion: nil, headerFields: nil)!
return .success(response, .noContent)
}
stub(matcher, builder)
泛型
您可以使用内置的泛型匹配器和构建器。这些可以单独使用,也可以与自定义组件结合使用。
内置匹配器
everything
- 匹配每个给定的请求。uri(template)
- 使用 URI 模板进行匹配。http(method, template)
- 使用 HTTP 方法和使用 URI 模板进行匹配。
内置构建器
failure(error)
- 使用给定的错误构建响应。http(status, headers, data)
- 使用给定的状态、头和数据构建 HTTP 响应。json(body, status, headers)
- 将给定的体序列化为 JSON 数据后构造 JSON HTTP 响应。jsonData(data, status, headers)
- 使用原始 JSON 数据构造 JSON HTTP 响应。
将 JSON 文件用作测试固定值
在 setUp
期间,将 JSON 文件加载为 NSData
并使用 jsonData
。
override func setUp() {
super.setUp()
let url = Bundle(for: type(of: self)).url(forResource: "fixture", withExtension: "json")!
let data = try! Data(contentsOf: url)
stub(matcher, jsonData(data))
}
许可
Mockingjay 采用 BSD 许可证授权。更多信息请参阅 LICENSE。