我是从使用工具来如SuperTest与和的NodeJS查找相关等同支持测试用蒸气3和服务器端迅速。
我看到使用使得与蒸气3可测试的应用程序执行终端的测试,例子是https://github.com/raywenderlich/vapor-til/blob/master/Tests/AppTests/Application%2BTestable.swift和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)
}
在所有的这些例子中,返回值是真正建立以交回解码的东西(的decodeTo:
这种设置)。在某些情况下,在我的蒸气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")
}