gpt4 book ai didi

scala - 使用查询参数测试 Play Controller

转载 作者:行者123 更新时间:2023-11-28 21:15:30 25 4
gpt4 key购买 nike

给定一个简单的 Play 2.6.24 Controller 来处理查询参数,即

class MyController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
def foo(name: Option[String]= None) = { ... }
}

在不实例化 FakeApplication 的情况下,我应该如何使用 ScalaTest 测试 foo 是否正常工作并获取正确的查询参数?

我得到的最接近的是:

class MyControllerSpec extends FlatSpec with StubControllerComponentsFactory with Results with Matchers {
private val controller = new MyController(stubControllerComponents())

it should "read `name` query parameter" in {
val result = controller.foo().apply(FakeRequest("GET", "/?name=test"))
contentAsString(result) shouldBe ...
}
}

但是,如您所知,这将不起作用:FakeRequest 内容将被忽略,我必须明确地将 Controller 称为 controller.foo(Some("test")) .apply(...) 看起来不太好,也不符合逻辑(为什么我仍然必须提供一个不会被使用的 FakeRequest?)。

我有一种感觉,因为它是在路由级别完成的,所以我将不得不使用 FakeApplication...但也许我错了,有人知道实现我正在寻找的东西的方法。

谢谢!

最佳答案

据我所知,除非您调用需要实际应用程序的路由器,否则您无法测试 FakeRequest 中提供的查询参数。

正如您所解释的,controller.foo(Some("test")).apply(...) 会起作用,因为查询参数被提取到方法参数中,但它实际上并没有添加对您的测试很有值(value)。

实例化应用程序并使用路由器进行测试可以让您验证客户端是否能够以应该支持的方式调用您的方法,包括路径、请求方法、 header 等。这也使得它如果您曾经更新 Controller 呈现结果的方式,则更容易检测不兼容的更改。

关于scala - 使用查询参数测试 Play Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com