StubNetworkKit

CI GitHub release CocoaPods Version CocoaPods Platform GitHub license

100% 纯 Swift 库,用于桩(stub)网络请求。

100% 纯 Swift 意味着:

安装

Swift Package Manager(推荐)

.package(url: "https://github.com/417-72KI/StubNetworkKit.git", from: "0.5.0"),

CocoaPods

警告

由于依赖关系,watchOS 在 CocoaPods 中不受支持。
如果您想使用包括 watchOS 在内的功能,请考虑迁移到 Swift Package Manager。

pod 'StubNetworkKit'

准备工作

纯 Swift 不支持方法调配(method-swizzling),因此您必须显式启用桩(stub)功能。

如果您仅使用 URLSession.shared,您可以调用 registerStubForSharedSession() 来启用桩(stub)功能。

否则,您应该注入已注册桩(stub)功能的 URLSessionConfiguration 实例。

使用 AlamofireAPIKit 的示例代码位于 示例 中。

示例

基础

stub(Scheme.is("https") && Host.is("foo") && Path.is("/bar"))
    .responseJson(["message": "Hello world!"])

根据请求中的条件分支切换响应。

stub(Scheme.is("https") && Host.is("foo") && Path.is("/bar")) { request in
    guard request.url?.query == "q=1" else {
        return .error(.unexpectedRequest($0))
    }
    return .json(["message": "Hello world!"])
}

使用 Result builder

stub {
    Scheme.is("https")
    Host.is("foo")
    Path.is("/bar")
    Method.isGet()
}.responseJson(["message": "Hello world!"])

根据请求中的条件分支切换响应。

stub {
    Scheme.is("https")
    Host.is("foo")
    Path.is("/bar")
    Method.isGet()
} withResponse: { request in
    guard request.url?.query == "q=1" else {
        return .error(.unexpectedRequest($0))
    }
    return .json(["message": "Hello world!"]) 
}

stub(url: "foo://bar/baz", method: .get)
    .responseData(Data("Hello world!".utf8))

函数链

stub()
    .scheme("https")
    .host("foo")
    .path("/bar")
    .method(.get)
    .responseJson(["message": "Hello world!"])

更多示例

如果您正在寻找更多示例,请查看 StubNetworkKitTests