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) }
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top