2017-08-27 5 views
0

異なるn/w要求を持つNetworkManagerクラス(本番対象)があります。私は生産の要求を作りたい場合は は今モヤを使用して、私は両方のためのプロバイダを作成する方法を切り替えたい場合、私はそうスタブと通常リクエストの間のMoyaスイッチ

let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub) 

の下に使用TestTarget要求のために、以下の

let provider = MoyaProvider<MyService>() 

使用しています。何が最善の方法です。 各方法でターゲットを確認していますか?要求関数を呼び出している間 か何か他の効率的な方法以下

は、要求のための私のコードは

func getRequest(onCompletion: @escaping NetworkCallBacks.ServiceResponse) { 

    //let provider = MoyaProvider<MyService>() //for production 
    let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub) // for test 
    provider.request(.getList(queryParameter: “Apple”)) { result in 

     switch result { 
     case let .success(moyaResponse): 
     case let .failure(error): 
      break 
     } 

    } 
} 

答えて

1

は、なぜあなたはネットワーク管理者の作成中に、いくつかのtest変数を渡すか、いないのか?

extension Api.Service { 

    convenience init(test: Bool) { 
     self.init() 
     self.test = test 
    } 
} 

そして、あなたが怠惰あなたのケースでは、テストまたはprodのプロバイダ

func getProvider() -> RxMoyaProvider<Target> { 
    return RxMoyaProvider<Target>(stubClosure: stubClosure) 
} 

func stubClosure(_ target: Target) -> Moya.StubBehavior { 
    return test ? Moya.StubBehavior.immediate : Moya.StubBehavior.never 
} 

を得ることができ、プロバイダを取得しながら、あなたはそれをこのように行うことができます:私はそれをこのように行う

func getRequest(onCompletion: @escaping NetworkCallBacks.ServiceResponse, test: Bool = false) 
2

構造体をstubClosure依存関係で作成し、NetworkManagerの作成中にコンストラクタにstubClos​​ureを渡すこともできます。プロダクション環境に渡す必要がないように、stubClos​​ureのデフォルト値はMoyaProvider.neverStubです。あなたがテストしたい場合にのみ、あなたが以下のようにstubClos​​ureを渡すことができるテストするとき、あなたはMoyaProvider.immediatelyStub

public struct NetworkingManager<T: TargetType> { 
    let provider: MoyaProvider<T> 

    init(stubClosure: @escaping MoyaProvider<T>.StubClosure = MoyaProvider.neverStub) { 
     self.provider = MoyaProvider<T>(stubClosure: stubClosure) 
    } 
} 

を渡すことができ

let networkManager = NetworkManager<MyService>(strubClosure: MoyaProvider.immediatelyStub) 
関連する問題