http - 在 Ktor 中测试 Post 请求

标签 http kotlin ktor

Ktor(kotlin 网络框架)有一个很棒的可测试模式,其中可以将 http 请求包装在单元测试中。他们给出了一个很好的例子来说明如何测试 GET 端点 here , 但是我在使用 http POST 时遇到了问题。

我试过了,但是帖子参数似乎没有添加到请求中:

    @Test
fun testSomePostThing() = withTestApplication(Application::myModule) {
    with(handleRequest(HttpMethod.Post, "/api/v2/processing") {
        addHeader("content-type", "application/x-www-form-urlencoded")
        addHeader("Accept", "application/json")
        body = "param1=cool7&param2=awesome4"
    }) {
        assertEquals(HttpStatusCode.OK, response.status())
        val resp = mapper.readValue<TriggerResponse>(response.content ?: "")
        assertEquals(TriggerResponse("cool7", "awesome4", true), resp)
    }
}

有人有什么想法吗?

最佳答案

对于那些使用备用 .apply 来验证结果的人,您可以在测试调用之前添加正文

withTestApplication({ module(testing = true) }) {
            handleRequest(HttpMethod.Post, "/"){
                setBody(...)
            }.apply {
                assertEquals(HttpStatusCode.OK, response.status())
                assertEquals("HELLO WORLD!", response.content)
            }
        }

关于http - 在 Ktor 中测试 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040613/

相关文章:

ruby-on-rails - http协议(protocol)在rails框架中的位置在哪里?

kotlin - Kotlin 中 Lock.withLock 和 synchronized 的区别

android - 如何在 kotlin 中创建一个可观察列表

android - 在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件

kotlin - 在 Ktor 应用程序模块而不是 Main 中获取命令行参数?

ios - 使用 header 和参数发出 get 请求时出现 alamofire 499

html - html 字符集是否适用于标记或内容或两者?

php - 使用 guzzle 发送发布请求时找不到客户端错误 404

Android 11(仅限)FragmentManager 崩溃 - FragmentManager 已被销毁

kotlin - 无法导入 Kotlin 多平台通用依赖项