我可以使用SwiftyJSON来获取Siesta中的错误内容吗?

时间:2016-07-22 21:12:55

标签: siesta-swift

我正在为我的基于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)

1 个答案:

答案 0 :(得分:0)

您的SwiftyJSONTransformer似乎未触及错误。尝试使用transformErrors: true

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

如果没有该标记,错误实体仍然是NSDictionary而不是SwiftyJSON JSON,而typedContent()会将这些视为不匹配的类型,并为您提供零。

(对于标题中的问题:是的,您可以从底层网络层获取完整的错误内容,以及响应标头和任何底层ErrorType / NSError信息。)< / p>