【问题标题】:Play modules test & FakeApplication播放模块测试和 FakeApplication
【发布时间】:2013-05-11 02:48:53
【问题描述】:

我想知道在 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)
  }
}

【问题讨论】:

    标签: scala module playframework-2.0 specs2


    【解决方案1】:

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

    您有三个选择:

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

    按照 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的方法

    【讨论】:

    • 感谢它是有道理的,但是我不知道如何处理路由,因为它们返回 404,除非它们是由父应用程序实现的。我试图在模块中添加一个基本路由文件只是为了测试但它不起作用,除非我删除 mymodule.routes
    • 除非启动 TestServer,否则无法测试 url。再次阅读我的答案
    猜你喜欢
    • 2012-08-28
    • 2023-03-30
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多