I-Test für meinen Controller schreiben will:Testing Controller mit gefälschter Session
Result changeAction = callAction(controllers.routes.ref.Users.changePassword());
assertThat(status(changeAction)).isEqualTo(OK);
Ich habe eine HTTP-Statuscode - 300.
Das ist richtig es ist umleiten, weil ich eine Klasse mit dem Namen gesichert
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()));
}
}
Und wenn ich die @Security.Authenticated(Secured.class)
Anmerkung für Controller-Methode verwenden, leitet es automatisch, wenn Session mit „userId“ tun existiert nicht.
Die Frage ist also, wie kann ich die Sitzung vortäuschen?
Ich habe versucht, rufen offenbar Controller.session("usderId", "2");
Und bekam eine Ausnahme:
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)
Meine Frage ist: Wie wird die Sitzung für Controller zu fälschen?
Und eine weitere Frage: Wie Routen ohne veraltete API, wie Result result = routeAndCall(fakeRequest(GET, "/change_password"));
testen?
Ich finde die Lösung vor 3 Minuten, bevor Sie auf Ihre Antwort schauen. Wie auch immer, danke nochmal! : D –