Я опробовал ваш пример и обнаружил, что в блоке "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