Ich versuche zu testen, dass sich jemand auf meiner Site anmelden kann, indem er eine POST-Anfrage an meine SessionsController
sendet. Ich habe diesen Weg an einigen Stellen empfohlen gesehen:Rails-Test - Überprüfen, ob der Benutzer bei Devise angemeldet ist
it 'must be able to sign in a user' do
user = create(:user)
post :create, format: :js, user: {email: user.email, password: user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal user
end
Aber dieser Test ist nicht korrekt. Der Aufruf von @controller.current_user
wird versuchen, den Benutzer mithilfe der angegebenen Parameter zu authentifizieren, und gibt user
zurück, wenn die angegebene E-Mail/das richtige Kennwort korrekt ist. Es gibt keine Garantie dafür, dass die Aktion create
tatsächlich sign_in
oder current_user
aufruft.
Auch wenn ich den Test neu schreiben, um zu überprüfen, dass diese Methoden aufgerufen werden, ist es möglich, dass andere Methoden wie z. sign_out
.
Gibt es einen definitiveren Weg, um letztendlich zu überprüfen, ob ein Benutzer angemeldet ist, und wenn ja, wer der Benutzer ist?
EDIT -
Zum Beispiel wird der folgende Test besteht
it 'must sign in a user' do
@controller.current_user.must_equal nil
post :create, format: :js, user: {email: @user.email, password: @user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal @user
end
wenn die SessionsController # Aktion zu erstellen ist:
def create
respond_to do |format|
format.js {
render nothing: true, status: 200
}
end
end
Kann es helfen? http://stackoverflow.com/questions/23793597/how-to-access-devise-current-user-in-rspec-feature-test – tmn4jq
Ich fürchte, ich glaube nicht, dass das hilft. Ich habe keine Probleme beim Aufruf von current_user. – user1063998
ist '.current_user' eine Methode, die versucht, den Benutzer einzuloggen, oder ist es ein attr_reader für eine Instanzvariable? Wenn der erste, dann scheint es, was Sie beschreiben, ist das erwartete Verhalten. –