iOS - 如何存根午睡电话?

时间:2016-05-02 07:26:37

标签: ios iphone swift siesta-swift

我正在尝试在我当前的应用程序中使用siesta,用于所有网络呼叫。 像往常一样,我正在写UT,确保一切按预期工作。 我目前正在努力与UT进行午睡PUT呼叫:我无法像以前那样使用Alamofire来阻止呼叫。

以下是午睡电话的代码:

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())

打印请求和存根请求不会显示任何差异。 使用alamofire而不是siesta工作得很好(存根被调用,我可以修改调用响应来测试所有预期的用例)。

1 个答案:

答案 0 :(得分:1)

在与我的一位同事讨论这个问题之后,似乎Siesta没有使用默认的NSURLSession。 因此,我在初始化Siesta服务时添加了默认会话,一切正常。

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

相关问题