StubNetworkKit

Stub your network requests in Swift

MIT License

Stars
1
Committers
1

StubNetworkKit

100% pure Swift library to stub network requests.

100% pure Swift means,

  • No more Objective-C API
  • Testable also in other than Apple platform (e.g. Linux)

Installation

Swift Package Manager(recommended)

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

CocoaPods

[!WARNING]

watchOS support is unavailable in CocoaPods due to dependency. If you want to use including watchOS, consider migrating to Swift Package Manager.

pod 'StubNetworkKit'

Preparation

Pure Swift is not supporting method-swizzling, therefore you have to enable stub explicitly.

If you are using URLSession.shared only, you can call registerStubForSharedSession() to enable stubs.

Otherwise, you should inject URLSessionConfiguration instance that stub is registered.

Sample codes with using Alamofire or APIKit exist in Sample.

Example

Basic

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

Switch response with conditional branches in request.

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!"])
}

Using Result builder

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

Switch response with conditional branches in request.

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("Hello world!".data(using: .utf8)!)

Function chain

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

More examples

If you are looking for more examples, look at StubNetworkKitTests.

Package Rankings
Top 45.7% on Swiftpackageindex.com
Top 29.6% on Cocoapods.org
Badges
Extracted from project README
CI GitHub release CocoaPods Version CocoaPods Platform GitHub license
Related Projects