Tôi muốn viết bài kiểm tra cho bộ điều khiển của tôi Kiểm tra:điều khiển với phiên giả
Result changeAction = callAction(controllers.routes.ref.Users.changePassword());
assertThat(status(changeAction)).isEqualTo(OK);
Tôi có một mã trạng thái http - 300.
Đúng nó là chuyển hướng bởi vì tôi có một lớp có tên Bảo đảm
package controllers;
import play.mvc.*;
import play.mvc.Http.*;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("userId");
}
@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Users.login(ctx.request().uri()));
}
}
Và khi tôi sử dụng chú thích @Security.Authenticated(Secured.class)
cho phương pháp điều khiển, nó sẽ chuyển hướng nếu phiên có "userId" không tồn tại.
Vì vậy, câu hỏi đặt ra là làm thế nào tôi có thể giả mạo phiên?
tôi đã cố gắng rõ ràng gọi Controller.session("usderId", "2");
Và có một ngoại lệ:
java.lang.RuntimeException: There is no HTTP Context available from here.
at play.mvc.Http$Context.current(Http.java:30)
at play.mvc.Controller.session(Controller.java:54)
at play.mvc.Controller.session(Controller.java:61)
at controllers.UsersTest.testUnloginedChangePassword(UsersTest.java:35)
Câu hỏi của tôi là: Làm thế nào để giả mạo phiên cho bộ điều khiển?
Và một câu hỏi bổ sung: cách kiểm tra tuyến đường mà không sử dụng API không dùng nữa, như Result result = routeAndCall(fakeRequest(GET, "/change_password"));
?
Tôi tìm giải pháp 3 phút trước, trước khi xem câu trả lời của bạn. Dù sao cảm ơn bạn, một lần nữa! : D –