簡體   English   中英

如何為Alamofire請求函數編寫單元測試?

[英]How to write Unit Test for Alamofire request function?

我有一個項目,我發送.GET請求從服務器獲取數據,為此我使用Alamofire和SwiftyJSON。

例如:

我有文件“鏈接”,“請求”和我的ViewController。

Links.swift

var getAllData: String {
    return "\(host)api/getalldata"
}

Requests.swift

func getAllData(_ completion:@escaping (_ json: JSON?) -> Void) {
    Alamofire.request(Links.sharedInstance.getAllData).validate().responseJSON { (response) in
        do {
            let json = JSON(data: response.data!)
            completion(json)
        }
    }
}

視圖控制器

Requests.sharedInstance.getAllData { (json) in
    // ...
}

那么,我怎樣才能為這個案例編寫單元測試? 我剛剛學習單元測試,在所有書籍中只有本地案例,沒有網絡案例的例子。 請允許任何人描述我並幫助如何使用Alamofire和SwiftyJSON編寫網絡請求的單元測試?

由於Requests.sharedInstance.getAllData調用是一個網絡請求,你需要使用expectation方法創建它的實例,這樣你就可以等待Requests.sharedInstance.getAllData的結果和超時了我設置10秒否則測試失敗。

並且我們期望常量error nil並且result nil否則測試也會失敗。

import XCTest

class Tests: XCTestCase {

  func testGettingJSON() {
    let ex = expectation(description: "Expecting a JSON data not nil")

    Request.sharedInstance.getAllData { (error, result) in

      XCTAssertNil(error)
      XCTAssertNotNil(result)
      ex.fulfill()

    }

    waitForExpectations(timeout: 10) { (error) in
      if let error = error {
        XCTFail("error: \(error)")
      }
    }
  }

}

可能您想要返回錯誤,以便了解您的請求失敗的原因,因此您的單元測試也可以驗證此信息。

func getAllData(_ completion: @escaping (_ error: NSError?, _ json: String?) -> Void) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM