如何在rails 3中将find_each存根到rspec测试中

Aar*_*ron 36 rspec ruby-on-rails rspec2

我想知道如何在rspec中测试find_each调用.我习惯于简单地存在我希望模型返回的内容,所以我不依赖于db中的测试数据,如下所示:

MyClass.stub(:find).and_return(my_mock)
Run Code Online (Sandbox Code Playgroud)

但是,在另一个班级我这样做:

MyClass.find_each do |instance_of_my_class|
  do_stuff_here_on(instance_of_my_class)
end
Run Code Online (Sandbox Code Playgroud)

我发现如果我这样做:

MyClass.stub(:find_each).and_return([one_mock, two_mock])
Run Code Online (Sandbox Code Playgroud)

在规范测试中,"在这里做东西"部分没有被执行.有谁知道如何存储find_each进行rspec测试?

Iai*_*ain 45

您可以使用and_yield使rspec调用传递给mock的块:

MyClass.stub(:find_each).and_yield(one_mock).and_yield(two_mock)
Run Code Online (Sandbox Code Playgroud)

  • 怎么样`.and_yield(one_mock).and_yield(two_mock)`? (4认同)