2016-07-22 47 views
1

我正在爲基於Siesta的類編寫一個測試,並試圖訪問從服務器收到的錯誤。在我的對象,我配置一樣的服務,以便:我可以使用SwiftyJSON獲取Siesta中的錯誤內容嗎?

self.service.configure { 
     $0.config.pipeline[.parsing].add(SwiftyJSONTransformer, contentTypes: ["*/json"]) 

     // other configuration setup 
    } 

我的測試包含以下內容:

api.fetchApiToken(libraryRequiringAuth).onSuccess({ _ in 
     // Then 
     XCTFail("Expected request failure, got success") 
    }).onFailure({ [weak self] (error) in 
     XCTAssertEqual(error.httpStatusCode, expectedStatusCode) 
     let serverError: JSON? = error.entity?.typedContent() 
     XCTAssertEqual(serverError![0]["title"].string, expectedErrorMessage) 
     print("Expected error is: \(error)") 
     XCTAssertNil(self?.api.bearerAuthHeader) 
     expectation.fulfill() 
    }) 

let serverError: JSON? = error.entity?.typedContent()被設置serverErrornil,但在調試器,我可以看到error.entity存在並具有我期望的內容。我現在不能使用SwiftyJSON?

編輯:

下面是錯誤的內容:

Error Error(userMessage: "Forbidden", httpStatusCode: Optional(403), entity: Optional(Siesta.Entity(content: [{ 
    ipRangeError =  { 
     libraryId = 657; 
     libraryName = "Test library"; 
     requestIp = "my.ip.address.was_here"; 
    }; 
    status = 403; 
    title = "Authentication Failed"; 
    userData =  { 
    }; 
}], charset: Optional("utf-8"), headers: ["content-type": "application/json; charset=utf-8"], timestamp: 490978565.82571602)), cause: nil, timestamp: 490978565.825499) 
+0

你絕對可以得到Siesta中的錯誤內容。它看起來像一個類型不匹配問題。你會記錄錯誤響應併發布? (在'onFailure'中'print(error.dynamicType,error)') –

+0

作爲解決方法,我發現'let serverError = JSON(error.jsonArray)'起作用,但我仍然希望能夠使用'typedContent()' –

回答

0

它看起來像你的SwiftyJSONTransformer離開出錯不變。試着用transformErrors: true配置它:

private let SwiftyJSONTransformer = 
    ResponseContentTransformer(transformErrors: true) 
    { JSON($0.content as AnyObject) } 

如果沒有該標誌,錯誤實體仍然是一個NSDictionary一個SwiftyJSON JSON的,而是和typedContent()看到那些作爲類型不匹配,給你一個零。

(並在標題的問題:是的,你可以得到完整的錯誤內容,以及響應報頭和底層網絡層的任何潛在ErrorType/NSError資訊)

相關問題