我可以使用 SwiftyJSON 获取 Siesta 中的错误内容吗?
Can I use SwiftyJSON to get at error contents in Siesta?
我正在为基于 Siesta 的 class 编写测试,我正在尝试访问从服务器收到的错误。在我的对象中,我这样配置服务:
self.service.configure {
[=10=].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()
将 serverError
设置为 nil
,但在调试器中,我可以看到 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)
您的 SwiftyJSONTransformer
似乎未处理错误。尝试使用 transformErrors: true
:
配置它
private let SwiftyJSONTransformer =
ResponseContentTransformer(transformErrors: true)
{ JSON([=10=].content as AnyObject) }
没有那个标志,错误实体仍然是 NSDictionary
而不是 SwiftyJSON JSON
,并且 typedContent()
将这些视为不匹配的类型并给你一个 nil。
(关于标题中的问题:是的,您可以从底层网络层。)
我正在为基于 Siesta 的 class 编写测试,我正在尝试访问从服务器收到的错误。在我的对象中,我这样配置服务:
self.service.configure {
[=10=].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()
将 serverError
设置为 nil
,但在调试器中,我可以看到 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)
您的 SwiftyJSONTransformer
似乎未处理错误。尝试使用 transformErrors: true
:
private let SwiftyJSONTransformer =
ResponseContentTransformer(transformErrors: true)
{ JSON([=10=].content as AnyObject) }
没有那个标志,错误实体仍然是 NSDictionary
而不是 SwiftyJSON JSON
,并且 typedContent()
将这些视为不匹配的类型并给你一个 nil。
(关于标题中的问题:是的,您可以从底层网络层。)