Rspec присваивает локальную переменную? - PullRequest
10 голосов
/ 03 ноября 2011

Просто интересно, есть ли способ получить доступ к локальным переменным в 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 [: payment] работает только в том случае, если я превращаю локальную переменную 'payment' в '@payments'.Это не главная проблема, но я бы предпочел, чтобы мои тесты rspec не влияли на реальный код.

Итак, есть ли способ ссылаться на локальные переменные в присваиваниях rspec?

Cheers...

1 Ответ

14 голосов
/ 09 ноября 2011

в основном нет. Думайте об этом как о тестировании черного ящика. rspec проверяет, что входит в метод или выходит из него (действие контроллера - это метод). Любые локальные переменные должны быть выброшены в конце метода - поэтому не могут быть проверены, когда завершен вызов метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...