如何从蒸气3单元测试做出响应访问原始内容?

问题描述 投票:1回答:1

我是从使用工具来如SuperTest与和的NodeJS查找相关等同支持测试用蒸气3和服务器端迅速。

我看到使用使得与蒸气3可测试的应用程序执行终端的测试,例子是https://github.com/raywenderlich/vapor-til/blob/master/Tests/AppTests/Application%2BTestable.swifthttps://medium.com/swift2go/vapor-3-series-iii-testing-b192be079c9e写了一个模式。

当使用这些在测试中,该格式通常看起来是这样的:

func testGettingASingleUserFromTheAPI() throws {
    let user = try User.create(name: usersName, username: usersUsername, on: conn)
    let receivedUser = try app.getResponse(to: "\(usersURI)\(user.id!)", decodeTo: User.Public.self)

    XCTAssertEqual(receivedUser.name, usersName)
    XCTAssertEqual(receivedUser.username, usersUsername)
    XCTAssertEqual(receivedUser.id, user.id)
  }

(从Vapor-TIL example code

在所有的这些例子中,返回值是真正建立以交回解码的东西(的decodeTo:这种设置)。在某些情况下,在我的蒸气3码,我只想验证一些非JSON编码的结果 - 只是简单的字符串,以及验证结果 - 但我没有找到方法来获取到内容或方便的方式与验证它XCTAssert。

response.content是可用的,周围(类型ContentContainer)的总体反应的容器。是否有在获得的基本内容表示直接验证他们一些例子还是不错的办法?

swift vapor
1个回答
2
投票

你可以写在Application+Testable自己额外的方法,如

func getRawResponse(to path: String) throws -> Response {
    return try self.sendRequest(to: path, method: .GET)
}
func getStringResponse(to path: String) throws -> String {
    let response = try self.getRawResponse(to: path)
    guard let data = response.http.body.data,
          let string = String(data: data, encoding: .utf8) else {
        throw SomeError("Unable to decode response data into String")
    }
    return string
}

然后打电话给他们,让无论是原Response或解码String

func testGettingHelloWorldStringFromTheAPI() throws {
    let string = try app. getStringResponse(to: "some/endpoint")

    XCTAssertEqual(string, "Hello world")
}
© www.soinside.com 2019 - 2024. All rights reserved.