gpt4 book ai didi

scala - Play 模块测试和 FakeApplication

转载 作者:行者123 更新时间:2023-12-04 15:24:00 26 4
gpt4 key购买 nike

我想知道在 PlayFramework 模块上运行 specs2 测试并能够模拟它运行的最佳方法是什么。

我的模块在名为 mymodule.routes 的文件中包含一些路由
在我的应用程序中,我通过在路由文件中添加以下行来集成它们

->  /mymodule mymodule.Routes

这是我尝试运行的模块中的测试,但返回 404 错误:
"test myroute" in {
running(FakeApplication()) {
await(WS.url("http://localhost:9000/mymodule/myroute").get).status must equalTo(OK)
}
}

最佳答案

FakeApplication 并没有真正启动 Web 进程,因此您无法使用对 localhost 的 http 访问进行测试。

你有三个选择:

  • 直接测试 Controller
  • 测试路由器
  • 测试整个应用程序。

  • 测试 Controller 是通过直接调用您的 Controller 并检查结果来完成的,如 Play 文档中所建议的那样,并提供 FakeRequest()
    val result = controllers.Application.index("Bob")(FakeRequest())

    通过使用 FakeRequest 参数调用 routeAndCall 来测试路由器,并指定相对路径:
    val Some(result) = routeAndCall(FakeRequest(GET, "/Bob"))

    最后,如果你想测试你的整个应用程序,你需要启动一个 TestServer:
    "run in a server" in {
    running(TestServer(3333)) {

    await(WS.url("http://localhost:3333").get).status must equalTo(OK)

    }
    }

    你的问题是:“什么是最好的选择?”。答案是:没有什么是最好的选择,不同的目的有不同的测试方法。您应该选择更符合您要求的测试策略。在这种情况下,既然你想测试路由器,我建议你尝试n.2的方法

    关于scala - Play 模块测试和 FakeApplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583554/

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