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

問題:

user=User.find(x) rescue nil私がそれをスタブしたとしても、それは常に find メソッドを救出します。を削除すると、正常にrescue nil動作します。

何か案は?

4

2 に答える 2

0

rescueif 条件は、ステートメントの途中などのステートメント修飾子を受け入れません。if次のように、完全なステートメントの最後にレスキューを配置できます。

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

find の代わりに find_by_id を使用しないのはなぜですか?

find_by_id は、id が存在しない場合、例外をスローする代わりに nil を返します。これは、実行していることとほとんど同じですが、少し速くなると思います。

于 2013-01-30T00:49:44.053 に答える