基于:Testing a page that is loaded after a redirect
Play!2.0 Framework(Scala)确实有API可以用来制作重定向。但是,在Play Framework(Scala)中有任何方法,测试用例会自动遵循重定向响应。我不想每次都重复重定向逻辑。
如何在Play Framework(Scala)的测试用例中重定向?
答案 0 :(得分:1)
修改:使其完全清晰。没有内置的方法可以做到这一点,并且有充分的理由。单元测试应该是简单和孤立的。单个单元测试旨在测试单个功能。
示例:您向需要身份验证的页面发出GET
请求,但您没有提供凭据,因此服务器以SEE OTHER
响应并附加了Flash消息。然后确保它适当地响应了该请求。测试结束。用SEE OTHER
响应的控制器函数应该不知道另一个,除了可能它将对该闪存数据执行某些操作。
示例2 :您向附加了Flash数据的登录页面发出GET
个请求。服务器以OK
响应,并在其中显示flash消息的HTML视图。你确定它会这样做。
如果您真的想将这两者结合在一起,那么使用WithBrowser进行测试可能更适合您。
如果您正在测试重定向信息,最好将其与重定向所指向的控制器功能/视图隔离开来。您可以使用测试助手来实现此目的。
假设您要测试
Redirect("/login").flashing("message" -> "You are not logged in.")
在您的测试中,您可以使用这些助手:
import play.api.test._
val request = FakeRequest(GET, "/secretpage")
val Some(result) = route(request)
status(result) must equalTo(SEE_OTHER)
redirectLocation(result) must beSome("/login")
flash(result).get("message") must beSome("You are not logged in.")
请注意,这适用于Play 2.1.x及更高版本。如果您使用的是2.0.x,则应将route
更改为routeAndCall
。