Mockingjay 3.0.0-alpha.1

Mockingjay 3.0.0-alpha.1

测试已测试
语言语言 SwiftSwift
许可证 BSD-3-Clause
发布时间最后发布2019年6月
SPM支持 SPM

Kyle Fuller维护。



Mockingjay 3.0.0-alpha.1

Mockingjay

一个优雅的 Swift 用来模拟 HTTP 请求的库,允许您使用 NSURLConnectionNSURLSession 模拟任何 HTTP/HTTPS 请求。这包括来自诸如 AlamofireAFNetworking 的库所做的任何请求。

安装

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