6

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

1 回答 1

4

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

你有三个选择:

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

测试控制器是通过直接调用您的控制器并检查结果来完成的,如播放文档中所建议的那样,并提供 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的方法

于 2013-05-16T09:42:18.620 回答