基于:测试重定向后加载的页面
Play!2.0 框架(Scala)确实有我们可以用来进行重定向的 API。但是,在 Play Framework ( Scala ) 中有什么方法可以让测试用例自动跟随重定向响应。我不想每次都重复重定向逻辑。
如何在 Play Framework (Scala) 的测试用例中遵循重定向?
基于:测试重定向后加载的页面
Play!2.0 框架(Scala)确实有我们可以用来进行重定向的 API。但是,在 Play Framework ( Scala ) 中有什么方法可以让测试用例自动跟随重定向响应。我不想每次都重复重定向逻辑。
如何在 Play Framework (Scala) 的测试用例中遵循重定向?
编辑:使其完全清楚。没有内置的方法可以做到这一点,这是有充分理由的。单元测试应该是简单和孤立的。单个单元测试旨在测试单个功能。
示例:您GET
向需要身份验证的页面发出请求,但您没有提供凭据,因此服务器响应SEE OTHER
并附加了一条消息。然后,您确保它适当地响应了该请求。测试结束。响应的控制器函数SEE OTHER
应该不知道另一个,除了它可能会对闪存数据做一些事情。
示例 2:您GET
向附加了 flash 数据的登录页面发出请求。服务器响应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
.