Tutoriel Rails 3, échecs RSpec
-
26-10-2019 - |
Question
Je suis en cours d'exécution à travers le Tutoriel Ruby on Rails 3, et ayant une balle de le faire, mais je suis venu juste en face des problèmes qui ne sont pas se résoudre. Quand je lance mes specs, deux tests échouent.
Failures:
1) UsersController PUT 'update' failure should render the 'edit' page
Failure/Error: put :update, :id => @user, :user => @attr
undefined local variable or method `object' for #<#<Class:0x00000102c861c8>:0x00000101d25558>
# ./app/views/shared/_error_messages.html.erb:3:in `_app_views_shared__error_messages_html_erb___3390867530789228804_2170854120__2806434579894406668'
# ./app/views/users/edit.html.erb:4:in `block in _app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
# ./app/views/users/edit.html.erb:3:in `_app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
# ./app/controllers/users_controller.rb:47:in `update'
# ./spec/controllers/users_controller_spec.rb:158:in `block (4 levels) in <top (required)>'
2) UsersController PUT 'update' failure should have the right title
Failure/Error: put :update, :id => @user, :user => @attr
undefined local variable or method `object' for #<#<Class:0x00000102c861c8>:0x00000101b211f8>
# ./app/views/shared/_error_messages.html.erb:3:in `_app_views_shared__error_messages_html_erb___3390867530789228804_2170854120__2806434579894406668'
# ./app/views/users/edit.html.erb:4:in `block in _app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
# ./app/views/users/edit.html.erb:3:in `_app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
# ./app/controllers/users_controller.rb:47:in `update'
# ./spec/controllers/users_controller_spec.rb:163:in `block (4 levels) in <top (required)>'
Je l'ai recherché dans mon code mieux que je peux comparer contre le code dans le livre, et je suis venu avec rien. Je suis sûr que c'est une petite chose stupide que je l'ai manqué, et je serais très reconnaissant une deuxième paire (ou plus;) des yeux.
Voici mes tests:
describe "failure" do
before(:each) do
@attr = { :email => "", :name => "", :password => "", :password_confirmation => "" }
end
it "should render the 'edit' page" do
put :update, :id => @user, :user => @attr
response.should render_template('edit')
end
it "should have the right title" do
put :update, :id => @user, :user => @attr
response.should have_selector("title", :content => "Edit User")
end
end
Et voici les méthodes de mise à jour de la users_controller:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
redirect_to @user
else
@title = "Edit User"
render 'edit'
end
end
Toute réflexion sur où je devrais regarder sont grandement appréciés.
La solution
La source du problème est pas dans les fichiers spec même si le problème se manifeste dans les fichiers de spécifications. L'instructeur, Michael Hartl, modifie la déclaration suivante:
<%= render 'shared/error_messages' %
to
<%= render 'shared/error_messages', :object => f.object %>
déclaration . En d'autres termes, il ajoute «: objet => f.object » à la première instruction. Et vous devez regarder dans tous les fichiers qui ont la déclaration d'origine et de les changer à la seconde. Si vous manquez un d'entre eux, vous aurez ces erreurs. Plus précisément dans les regarder fichiers suivants (et toute autre qui pourrait avoir la déclaration d'origine):
app/views/users/edit.html.erb
app/views/users/fields.html.erb
app/views/users/new.html.erb
app/views/shared/micropost_form.html.erb