RSpec有故障存根方法调用内联救援

时间:2013-01-29 22:24:44

标签: ruby-on-rails rspec stub

我正在尝试在控制器上测试方法:

def a_method(list)
  @users = []
  list.each do |x|
    if user=User.find(x) rescue nil
      @users << user
    end
  end
end

在我的Rspec示例中,我有:

it "should do something" do
  User.stub :find => 'user'
  controller.a_method([1,2,3,4])
  assigns[:users].should == ['user','user','user','user']
end

问题:

它始终拯救了查找方法user=User.find(x) rescue nil,即使我已经将其删除了。 如果我删除了rescue nil,则可以正常使用。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

if条件不接受语句修饰符,例如rescue进入语句的一半。 您可以将救援放在完整的if语句的末尾,如下所示:

if user=User.find(x)
  @users << user
end rescue nil

答案 1 :(得分:0)

为什么不使用find_by_id而不是find?

如果id不存在而不是抛出异常,则find_by_id返回nil,它与您正在做的几乎相同,但是我想更快一点,并且读得更清楚