如何将 update_attributes 设置为 false 来存根“current_user”?

发布于 2024-09-18 16:08:30 字数 287 浏览 4 评论 0原文

这是一个纯粹的语法问题。我对 RSpec 很陌生。

我基本上想在这个错误行的行上写一些东西:

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

有人知道如何正确编写它吗?

RSpec 的默认值如下所示:

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

This is a pure syntactical question. I'm very new to RSpec.

I basically want to write something on the lines of this erroring line :

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

Anyone know how to properly write that?

RSpec's default looks like this :

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情话墙 2024-09-25 16:08:30

这看起来像 stub_chain 的情况:

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

请注意,这只是替换列表中的方法它们发生的顺序,因此为了使其有意义,您的控制器中将有一个 current_user.update_attributes 。如果您有类似 @user.update_attributes 的内容,我认为它不会起作用。

有关 APIDock 的更多信息

This looks like a case for stub_chain:

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

Note that this is just going to replace methods in the list in the order they occur, so for this to make sense you'll have a current_user.update_attributes in your controller. If you have something like @user.update_attributes, I don't think it will work.

More info on APIDock

执妄 2024-09-25 16:08:30

我只是盲目地尝试了一千种变化,最后终于通过了:

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

但是说真的,这有什么意义吗?就这样过去了 :D

I just blindly played around with a thousand variations and finally got it to pass with this :

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

But seriously, does that even make any sense? It's passing :D

温暖的光 2024-09-25 16:08:30

对于 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

With RSpec 3.0 and rspec-mocks the way to do this is to use 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
遇见了你 2024-09-25 16:08:30

这并没有具体解决 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

This does not address update_attributes specifically, but the following worked for me. Assuming your current_user helper lives in 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文