0

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

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

问题:

它总是拯救 find 方法user=User.find(x) rescue nil,即使我已经把它存根了。如果我删除rescue nil它工作正常。

有任何想法吗?

4

2 回答 2

0

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

if user=User.find(x)
  @users << user
end rescue nil
于 2013-01-29T23:28:47.900 回答
0

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

如果 id 不存在而不是抛出异常, find_by_id 返回 nil,这与您所做的几乎相同,但我猜要快一点,而且阅读起来更干净

于 2013-01-30T00:49:44.053 回答