私はあなたの例を試してみましたが、「config.before」ブロックでは、ビュー仕様ファイルの「前」ブロックと比較して、RSpec ビュー例オブジェクトがまだ完全に初期化されていないことがわかりました。したがって、「config.before」ブロックでは、テンプレートがまだ初期化されていないため、「template」メソッドは nil を返します。たとえば、これらの両方のブロックに「puts self.inspect」を含めることで確認できます。
あなたの場合、DRYer仕様を達成するための1つの回避策は、spec_helper.rbで定義することです
Rスペック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
Rスペック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(:each) ブロックにインクルードします
before(:each) do
# ...
stub_forgery_protection
# ...
end