Я запускаю Rails 3.1.1, RSpec 2.7.0 и HAML 3.1.3.
Скажем, у меня есть следующие файлы представлений:
приложение/просмотров/макеты/application.html.haml!!!
%html
%head
%title Test
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%body
= content_for?(:content) ? yield(:content) : yield
приложение/просмотров/макеты/companies.html.haml
- content_for :content do
#main
= yield :main
#sidebar
= yield :sidebar
= render :template => 'layouts/application'
приложение/просмотров/компании/index.html.haml
- content_for :main do
%h1 MainHeader
- content_for :sidebar do
%h1 SidebarHeader
И следующий файл спецификации:
спецификации/мнение/компания/index_spec.rbrequire 'spec_helper'
describe 'companies/index.html.haml' do
it 'should show the headers' do
render
rendered.should contain('MainHeader')
rendered.should contain('SidebarHeader')
end
end
Когда я запускаю RSpec, я получаю следующую ошибку:
1) companies/index.html.haml should show the headers
Failure/Error: rendered.should contain('MainHeader')
expected the following element content to include "MainHeader":
# ./spec/views/companies/index_spec.rb:7:in `block (2 levels) in <top (required)>'
Сначала я подумал, что RSpec каким-то образом пропускал блоки content_for при визуализации файлов вида. Однако мне не удалось найти какую-либо проблему, связанную с этим в репозитории RSpec github, поэтому я не уверен, кто виноват здесь.
Одно (последнее) решение, которое я нашел, находится в http://www.dixis.com/?p=571. Однако, когда я пробую предлагаемый код
view.instance_variable_get(:@_content_for)
он возвращает nil.
- Есть ли способ протестировать content_for для просмотра спецификаций?
- Есть ли лучший способ структурирования моих файлов макета, так что я действительно могу их протестировать и все еще добиваться того же конечного результата?