Rspec和spawn gem:如何在spawned_out进程中测试“should_receive”

时间:2013-04-03 16:03:57

标签: ruby-on-rails rspec spawn

我有一个调用spawn块的控制器动作

class MyController <  ApplicationController
  ....
  def send_product_mails
    if @user.has_rights?
        spawn_block(:nice => 19 ) do 
          @current_product.send_mail
        end
    end
  end
  ...
end

我希望在@current_product上调用send_mail,但它告诉我它没有收到它。应该怎么做呢?

我的规格如此:

it "works with spawn" do
  # Setup: create Product, Usersession (via UserSession.create(user))
  get :send_product_mails, :id => product.id
  MyController.any_instance.should_receive(:spawn_block).and_yield("sd")
end

我想要指定如果用户拥有权限,则会将某些内容传递给spawn_block,否则不会传递任何内容。现在使用不同的trys(在MyController,MyController.any_instance,@ console上的测试中调用.should_receive,有或没有and_yield这总是会出现错误,表明没有收到消息spawn_block。(是的,我通过在if语句中添加puts-debug-output来检查权限是否正常。)

编辑:为问题提供更多上下文和代码,以及我尝试过的内容

1 个答案:

答案 0 :(得分:1)

您需要在测试代码运行之前设置期望(对should_receive的调用)