如何从 Vapor 3 单元测试中的响应访问原始内容?
How to access the raw content from a response in Vapor 3 unit test?
我来自于将 SuperTest 等工具与 NodeJS 结合使用,并正在寻找相关的等价物来支持使用 Vapor 3 和服务器端进行测试 swift。
我看到了使用 Vapor 3 制作可测试应用程序来测试端点的模式,例如 https://github.com/raywenderlich/vapor-til/blob/master/Tests/AppTests/Application%2BTestable.swift and the write-up at https://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)
}
在所有这些示例中,return 值实际上被设置为返回给可解码的东西(decodeTo:
类型的设置)。在某些情况下,在我的 Vapor 3 代码中,我只想验证一些非 JSON 编码的结果——只是简单的字符串,并验证结果——但我还没有找到进入内容的方法或方便的方法用 XCTAssert 验证它。
response.content
可用,它是围绕整体响应(ContentContainer 类型)的容器。是否有一些示例或好的方法可以获取底层内容表示以直接验证它们?
您可以在 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")
}
我来自于将 SuperTest 等工具与 NodeJS 结合使用,并正在寻找相关的等价物来支持使用 Vapor 3 和服务器端进行测试 swift。
我看到了使用 Vapor 3 制作可测试应用程序来测试端点的模式,例如 https://github.com/raywenderlich/vapor-til/blob/master/Tests/AppTests/Application%2BTestable.swift and the write-up at https://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)
}
在所有这些示例中,return 值实际上被设置为返回给可解码的东西(decodeTo:
类型的设置)。在某些情况下,在我的 Vapor 3 代码中,我只想验证一些非 JSON 编码的结果——只是简单的字符串,并验证结果——但我还没有找到进入内容的方法或方便的方法用 XCTAssert 验证它。
response.content
可用,它是围绕整体响应(ContentContainer 类型)的容器。是否有一些示例或好的方法可以获取底层内容表示以直接验证它们?
您可以在 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")
}