这是一个纯粹的句法问题。我对RSpec很新。
我基本上想在这条错误行的行上写一些东西:
controller.stub!(:current_user(:update_attributes => false))
任何人都知道如何正确地写这个?
RSpec的默认设置如下:
User.stub(:find) { mock_user(:update_attributes => false) }
答案 0 :(得分:8)
这看起来像stub_chain
:
controller.stub_chain(:current_user,:update_attributes).and_return(false)
请注意,这只是按照它们发生的顺序替换列表中的方法,因此为了理解这一点,您的控制器中将有current_user.update_attributes
。如果您有类似@user.update_attributes
的内容,我认为它不起作用。
有关APIDock
的更多信息答案 1 :(得分:6)
我只是盲目地玩了一千种变化,最后还是通过了这个:
controller.stub!(:current_user).and_return(@user)
@user.stub!(:update_attributes => false)
但严重的是,这甚至没有任何意义吗?它正在传递:D
答案 2 :(得分:2)
使用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
答案 3 :(得分: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