如何在测试用例中跟踪重定向?

时间:2014-06-16 17:18:09

标签: scala testing playframework spec2

基于:Testing a page that is loaded after a redirect

Play!2.0 Framework(Scala)确实有API可以用来制作重定向。但是,在Play Framework(Scala)中有任何方法,测试用例会自动遵循重定向响应。我不想每次都重复重定向逻辑。

如何在Play Framework(Scala)的测试用例中重定向?

1 个答案:

答案 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