Rspec分配局部变量?

Pla*_*Ton 10 rspec ruby-on-rails

只是想知道是否有办法在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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

干杯...

Tar*_*ast 14

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