Как правильно заглушить методы шаблона во всех спецификациях вида с помощью rspec-rails? - PullRequest
3 голосов
/ 22 декабря 2008

У меня есть несколько спецификаций просмотра, которые требуют определенных методов, чтобы быть заглушенными. Вот то, что я думал, будет работать (в spec_helper.rb):

Spec::Runner.configure do |config|
  config.before(:each, :type => :views) do
      template.stub!(:request_forgery_protection_token)
      template.stub!(:form_authenticity_token)
  end
end

Но когда я запускаю какую-либо спецификацию вида, она не срабатывает с

You have a nil object when you didn't expect it! The error occurred while evaluating nil.template

Выполнение точно такого же действия в блоке before (: each) каждого примера прекрасно работает.

1 Ответ

3 голосов
/ 23 декабря 2008

Я опробовал ваш пример и обнаружил, что в блоке "config.before" пример объекта RSpec view еще не полностью инициализирован по сравнению с блоком "before" в файле спецификации view. Поэтому в "config.before" блоке "template" метод возвращает nil, так как шаблон еще не инициализирован. Вы можете увидеть это, включив, например, "помещает self.inspect" в оба этих блока.

В вашем случае один из обходных путей для достижения спецификации DRYer - определить в spec_helper.rb

RSpec 2

module StubForgeryProtection
  def stub_forgery_protection
    view.stub(:request_forgery_protection_token)
    view.stub(:form_authenticity_token)
  end
end

RSpec.configure do |config|
  config.include StubForgeryProtection
end

RSpec 1

module StubForgeryProtection
  def stub_forgery_protection
    template.stub!(:request_forgery_protection_token)
    template.stub!(:form_authenticity_token)
  end
end

Spec::Runner.configure do |config|
  config.before(:each, :type => :views) do
    extend StubForgeryProtection
  end
end

и затем в каждом блоке before (: каждом), где вы хотите использовать эти заглушки, включайте

before(:each) do
  # ...
  stub_forgery_protection
  # ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...