Rspec分配局部变量?

时间:2011-11-03 13:46:55

标签: ruby-on-rails rspec

只是想知道是否有办法在rspec中访问局部变量而不将它们转换为实例变量?解释我的问题:

我有以下行动:

  def queue_due_mail
    payments = Payment.due_soon.where(:send_reminder => true)
    payments.each do |p|
      PaymentMailer.delay.reminder_email(p)
      p.send_reminder = false
      p.save
    end
    redirect_to root_path
  end

而且,在我的规范中,我想运行这样的东西:

it "should assign nearly due payments to payments" do
  Payment.stub_chain(:due_soon, :where) { [mock_payment] }
  get :queue_due_mail
  assigns[:payments].should eq([mock_payment])
end

问题是,只有当我将本地变量'payments'变为'@payments'时,分配[:payments]调用才有效。这不是一个主要问题,但我宁愿不让我的rspec测试受到实际代码的影响。

那么,有没有办法在rspec指定中引用局部变量?

干杯...

1 个答案:

答案 0 :(得分:14)

基本上没有。将其视为黑盒测试。 rspec测试进出方法的内容(控制器操作是一种方法)。任何局部变量应该在方法结束时被抛弃 - 因此在方法调用结束时无法测试。