【发布时间】:2011-11-03 13:46:55
【问题描述】:
只是想知道是否有一种方法可以访问 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
问题在于,assigns[:payments] 调用仅在我将局部变量“payments”转换为“@payments”时才有效。这不是主要问题,但我宁愿不让我的 rspec 测试受到实际代码的影响。
那么,有没有办法在 rspec 赋值中引用局部变量?
干杯...
【问题讨论】:
-
Offtopic:重定向时,使用
_url而不是_path; HTTP RFC 2616. -
我不知道你是怎么做到的,但我认为这可能是因为在你试图做的事情中测试和代码之间存在太多的耦合。您真的需要测试是否分配了局部变量吗?当然,您真正想要检查的是 PaymentMailer 接收到正确的方法调用,并且 mock_payment 将 send_reminder 设置为 false。详细的实现实际上并不重要,因为没有其他代码应该知道支付变量。
-
点头 是的 - 公平点,尼克。不过,很好奇这是否可能。
标签: ruby-on-rails rspec