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)
.package(url: "https://github.com/417-72KI/StubNetworkKit.git", from: "0.5.0"),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'
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.
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!"])
}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("Hello world!".data(using: .utf8)!)stub()
.scheme("https")
.host("foo")
.path("/bar")
.method(.get)
.responseJson(["message": "Hello world!"])If you are looking for more examples, look at StubNetworkKitTests.