Ich habe die folgende Route:Devise Rspec Registrierung Controller Test auf Update versagt, als ob es versucht, E-Mail-Adresse zu bestätigen
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks",
:registrations => 'users/registrations',
:sessions => "users/sessions" }
und den folgenden Controller-Test (registrations_controller_spec.rb):
require File.dirname(__FILE__) + '/../spec_helper'
describe Users::RegistrationsController do
include Devise::TestHelpers
fixtures :all
render_views
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
end
describe "POST 'create'" do
describe "success" do
before(:each) do
@attr = { :email => "[email protected]",
:password => "foobar01", :password_confirmation => "foobar01", :display_name => "New User" }
end
it "should create a user" do
lambda do
post :create, :user => @attr
response.should redirect_to(root_path)
end.should change(User, :count).by(1)
end
end
end
describe "PUT 'update'" do
before(:each) do
@user = FactoryGirl.create(:user)
@user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
sign_in @user
end
describe "Success" do
it "should change the user's display name" do
@attr = { :email => @user.email, :display_name => "Test", :current_password => @user.password }
put :update, :id => @user, :user => @attr
puts @user.errors.messages
@user.display_name.should == @attr[:display_name]
end
end
end
end
Nun, wenn ich rspec spec laufen lasse, bekomme ich (was ich denke) seltsame Ergebnisse:
Der "sollte einen Benutzer erstellen" Test besteht. Die Benutzeranzahl von 1.
jedoch zugenommen hat, meine „sollte den Anzeigenamen des Benutzers ändern“ schlägt fehl, wie folgt:
1) Users::RegistrationsController PUT 'update' Success should change the user's display name
Failure/Error: @user.display_name.should == @attr[:display_name]
expected: "Test"
got: "Boyd" (using ==)
Und das seltsame Bit ist, dass meine Aussage:
puts @user.errors.messages
Rendert die folgende Meldung:
{:email=>["was already confirmed, please try signing in"]}
Was ist los? Der Benutzer ist angemeldet! Dies wird durch die Tatsache bewiesen, dass der Rspec-Fehler den Anzeigename von "Boyd" zurückgegeben hat. Und warum wird eine Nachricht so angezeigt, als ob sie mit der Bestätigung des Kontos im Gegensatz zur Aktualisierung der Daten eines Benutzers zusammenhängt?
Jede Hilfe würde sehr geschätzt werden!
Ich bin sicher, der Name wird von der Fabrik abgeholt und nicht unbedingt ein Login-Prozess. Hilft dir das überhaupt? Http://stackoverflow.com/questions/4230152/mocks-arent-working-with-rspec-and-devise – holtkampw
Ja, du hast Recht !!! Das Holz nicht für die Bäume sehen! Habe @user durch subject.current_user im Test ersetzt und alles funktioniert. Vielen Dank! – HapiDaze