I want to make a Moya stub request in my Quick/Nimble BDD tests. Moya has a sampleData
parameter I created using a JSON file:
var sampleData: Data {
switch self {
case .getPlaces:
// Provided that project have a file named get_places.json in it's bundle.
guard let path = Bundle.main.path(forResource: "get_places", ofType: "json"),
let data = Data(base64Encoded: path) else {
return Data()
}
return data
case .getPlaceDetail:
// Provided that project have a file named get_place_detail.json in it's bundle.
guard let path = Bundle.main.path(forResource: "get_place_detail", ofType: "json"),
let data = Data(base64Encoded: path) else {
return Data()
}
return data
}
}
How can I use this parameter in tests? Any ideas to make a Moya stub request in tests?
Thank you!
Just use your provider like you did in your real code. Moya detects that current target is test target and will return the sample data instead of performing the request
If you're still interested to use sample data for development (if backend is not ready yet), you can create Moya provider passing endpoint
closure like below:
let endpoint = { (target: NetworkApiService) -> Endpoint in
return Endpoint(url: URL(target: target).absoluteString,
sampleResponseClosure: { .networkResponse(200, target.sampleData) },
method: target.method,
task: target.task,
httpHeaderFields: target.headers)
}
let provider = MoyaProvider<NetworkApiService>(endpointClosure: endpoint, stubClosure: MoyaProvider.immediatelyStub)
It will return data, specified at public var sampleData: Data
of TargetType
protocol.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With