我正在尝试在控制器上测试方法:
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
,则可以正常使用。
有什么想法吗?
答案 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,它与您正在做的几乎相同,但是我想更快一点,并且读得更清楚