5

これは純粋な構文の問題です。私はRSpecに非常に慣れていません。

私は基本的に、このエラー行の行に何かを書きたいと思っています:

controller.stub!(:current_user(:update_attributes => false))

それを正しく書く方法を知っている人はいますか?

RSpec のデフォルトは次のようになります。

User.stub(:find) { mock_user(:update_attributes => false) }
4

4 に答える 4

8

これは次の場合のように見えますstub_chain:

controller.stub_chain(:current_user,:update_attributes).and_return(false)

これは、リスト内のメソッドを発生順に置き換えるだけであることに注意してください。そのため、これを理解するにはcurrent_user.update_attributes、コントローラーに a を含める必要があります。のようなものがある場合@user.update_attributes、うまくいかないと思います。

APIDockの詳細

于 2010-09-10T05:31:30.390 に答える
6

私は盲目的に千のバリエーションで遊んで、最終的にこれで合格しました:

controller.stub!(:current_user).and_return(@user)
@user.stub!(:update_attributes => false)

しかし、真剣に、それは意味がありますか?通り過ぎます:D

于 2010-09-10T05:46:23.620 に答える
3

RSpec 3.0 とrspec-mocksでは、これを行う方法は を使用すること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
于 2014-09-24T05:45:54.393 に答える
0

これは特に update_attributes に対処するものではありませんが、次の方法でうまくいきました。current_user ヘルパーが 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
于 2016-03-01T05:03:28.083 に答える