代码之家  ›  专栏  ›  技术社区  ›  heckj

如何从Vapor 3单元测试中的响应中访问原始内容?

  •  1
  • heckj  · 技术社区  · 6 年前

    我使用了工具,比如NodeJS的SuperTest,并寻找相关的等价物来支持Vapor 3和服务器端swift的测试。

    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)
      }
    

    Vapor-TIL example code )

    decodeTo: 一种设置)。在我的Vapor 3代码的某些情况下,我只想验证一些非JSON编码的结果——只是简单的字符串,并验证结果——但我还没有找到进入内容的方法,也没有找到使用Xctasert验证内容的方便方法。

    response.content 是可用的,一个容器围绕整体响应(类型 ContentContainer

    1 回复  |  直到 6 年前
        1
  •  3
  •   imike    6 年前

    您可以在中编写自己的附加方法 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")
    }
    
    推荐文章