ruby on rails - valido - Probar la prueba del controlador de registro Rspec que falla en la actualización como si estuviera intentando confirmar la dirección de correo electrónico
porque no me llega el codigo de verificacion de facebook a mi celular (1)
Tengo la siguiente ruta:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks",
:registrations => ''users/registrations'',
:sessions => "users/sessions" }
y la siguiente prueba de controlador (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
Ahora, cuando ejecuto las especificaciones de rspec, obtengo (lo que creo) resultados extraños:
Los pases de prueba "debe crear un usuario". El número de usuarios aumentó en 1.
Sin embargo, mi "debería cambiar el nombre para mostrar del usuario" falla de la siguiente manera:
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 ==)
Y lo más extraño es que mi declaración:
puts @user.errors.messages
Representa el siguiente mensaje:
{:email=>["was already confirmed, please try signing in"]}
¿Que esta pasando? ¡El usuario ha iniciado sesión! Esto se demuestra por el hecho de que el error Rspec devolvió el nombre de visualización de "Boyd". ¿Y por qué se muestra un mensaje parece estar relacionado con la confirmación de la cuenta en lugar de actualizar los detalles de un usuario?
¡Cualquier ayuda sería muy apreciada!
Esto funciona. Gracias holtkampw por ver lo que no era! Puse un código extra allí solo para verificarlo y todo está bien.
it "should change the user''s display name" do
subject.current_user.should_not be_nil
@attr = { :email => @user.email, :display_name => "Test", :current_password => @user.password }
puts "Old display name: " + subject.current_user.display_name
put :update, :id => subject.current_user, :user => @attr
subject.current_user.reload
response.should redirect_to(root_path)
subject.current_user.display_name == @attr[:display_name]
puts "New display name: " + subject.current_user.display_name
end