【问题标题】:RSpec stub helper method in controller spec控制器规范中的 RSpec 存根辅助方法
【发布时间】:2013-01-18 18:49:16
【问题描述】:

发现了类似的问题,但令人惊讶的是没有,我已经找到了,给出一个简单的答案......

尝试在我的控制器规范中存根辅助方法;不太确定需要加倍的对象是什么?

控制器调用这个方法:

#app/helpers/sessions_helper.rb

def signed_in?
  current_user.present?
end

我想在规范中将其存根以返回真/假。

【问题讨论】:

  • 尝试“current_user.stub(:present?).and_return(true)”。我知道 helper 是在其他地方定义的,但它会更具可读性。
  • Alex,不是 current_user.stub...,而是 controller.current_user.stub...
  • 是的。 current_user.stub... 产生错误:undefined local variable or method 'current_user'

标签: ruby-on-rails rspec rspec-rails


【解决方案1】:

您可以从控制器规范中对其进行存根:

controller.stub!(:signed_in?).and_return(true) # emulate signed in user
controller.stub!(:signed_in?).and_return(false) # emulate unsigned user

对象“控制器”是在控制器规范中预定义的。

更新:

使用 RSpec 3 语法:

allow(controller).to receive(:signed_in?).and_return(true)
allow(controller).to receive(:signed_in?).and_return(false)

感谢@jakeonrails 的提醒。

【讨论】:

  • 是的,正如 Alex Teut 上面所写的,我通常是两个已签名的存根?和 current_user - 我的代码不依赖于实现。然后规范将通过我选择的任何检查方法。
  • 类似controller.stub!(:current_user).and_return(FactoryGirl.create(:user))?
  • Yes - 模拟签名用户,或 ...and_return(nil) 模拟未签名用户。这不是必需的,但 in_addition 对 signed_in 有用吗?刺伤。
  • stub!,虽然没有被弃用,但可能不应该使用,更好的方法是 stub: blog.firsthand.ca/2010/09/rspec-stub-vs-stub.html
  • 在 rspec 3 中为较新的 rails 5.2 仅供参考我不得不存根 controller.helpers 方法与控制器方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2015-11-12
  • 2012-05-19
相关资源
最近更新 更多