Comment pouvez-vous cognez un `current_user` avec update_attributes mis à faux?
-
02-10-2019 - |
Question
Ceci est une pure question syntactique. Je suis très nouveau pour RSpec.
Je veux essentiellement d'écrire quelque chose sur les lignes de cette ligne erroring:
controller.stub!(:current_user(:update_attributes => false))
Quelqu'un sait comment écrire correctement cela?
Les regards par défaut de RSpec comme ceci:
User.stub(:find) { mock_user(:update_attributes => false) }
La solution
Cela ressemble à un cas pour stub_chain
:
controller.stub_chain(:current_user,:update_attributes).and_return(false)
Notez que cela va simplement remplacer les méthodes dans la liste dans l'ordre où ils se produisent, donc pour cela ait un sens, vous aurez un current_user.update_attributes
dans votre contrôleur. Si vous avez quelque chose comme @user.update_attributes
, je ne pense pas que cela fonctionnera.
Plus d'infos sur APIDock
Autres conseils
Je aveuglément joué avec mille variations et a finalement obtenu à passer avec ceci:
controller.stub!(:current_user).and_return(@user)
@user.stub!(:update_attributes => false)
Mais sérieusement, est-ce même un sens? Il est passe: D
Avec RSpec 3.0 et rspec-raille la façon de le faire est d'utiliser allow
.
before(:each) do
@user = mock_model(User)
allow(controller).to(receive(:current_user).and_return(@user))
allow(@user).to(receive(:update_attributes).and_return(false))
end
Cette adresse n'a pas update_attributes spécifiquement, mais ce qui suit a fonctionné pour moi. En supposant que votre vie helper CURRENT_USER dans ApplicationController:
user = double(:user)
allow(controller).to(receive(:current_user).and_return(user))
allow(controller.current_user).to receive(:is_admin?).and_return(false)
current_user.is_admin? # => false