【问题标题】:RSpec having trouble stubbing method called with inline rescueRSpec 在使用内联救援调用存根方法时遇到问题
【发布时间】:2013-01-29 22:24:43
【问题描述】:

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

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 它工作正常。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails rspec stub


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      如果 id 不存在而不是抛出异常,find_by_id 返回 nil,这几乎与您正在执行的操作相同,但我猜要快一点并且阅读起来更清晰

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 2017-05-26
        相关资源
        最近更新 更多