2016-05-02 6 views
0

現在のアプリケーションですべてのネットワークコールでsiestaを使用しようとしています。 いつものように、私はすべてが期待通りに働いていることを保証するUTを書いています。 私は現在、シエスタPUTコールでUTと闘っています。私はAlamofireと同じようにコールをスタブすることができません。ここiOS - シエスタコールをスタブする方法

は昼寝コールのコードである:ここ

func rateSession(sessionId: Int, rating: Int, completionHandler: (Bool -> Void)? = nil) { 
    Api.shared.resource("session/" + String(sessionId) + "/rate") 
    .withParam("user_id", userId) 
    .request(.PUT, json: ["rate": rating]) 
    .onSuccess { _ in 
     print("siesta call ok") 
     completionHandler?(true) 
    } 
    .onFailure { _ in 
     print("siesta call failed") 
     completionHandler?(false) 
    } 
} 

は(MockingJayを使用して)昼寝呼び出しスタブおよびテストするために使用されるコードである:

// Given 
let sessionId = 42 
let sessionService = SessionService(userId: "42") 
var rateSessionSuccess = false 

self.stub(http(.PUT, uri: "http://demo.usievents.com/api/v1/session/42/rate?user_id=42"), builder: http(204)) 

// When 
sessionService.rateSession(sessionId, rating: 1) { success in 
    rateSessionSuccess = success 
} 

// Then 
expect(rateSessionSuccess).toEventually(beTrue()) 

印刷要求とスタブ要求がありません差を示してください。 siestaの代わりにalamofireを使用すると、スタブが呼び出され、想定されるすべてのユースケースをテストするコール応答を変更できます。

+0

シエスタはちょうどMockingJayがサポート 'NSURLConnection'を、使用していますので、ほとんどの場合、あなたのスタブはシエスタを作っているコールに一致していません。あなたが 'stub(すべて、失敗(NSError()))'を実行すると、それはシエスタ呼び出しをインターセプトしますか?フルSiestaロギングを有効にした場合、HTTPがあなたのスタブと正確に一致していますか? –

答えて

1

私の同僚との問題を議論した後、シエスタはデフォルトのNSURLSessionを使用していないようです。 したがって、シエスタサービスを初期化するときにデフォルトのセッションを追加しただけで、すべて正常に動作します。

super.init(baseURL: environment.apiBaseAddress, networking: NSURLSessionConfiguration.defaultSessionConfiguration())

関連する問題