Я использую Rails 3.1. 1, RSpec 2.7.0 и HAML 3.1.3.
Допустим, у меня есть следующие файлы представлений:
app / views / layouts / application.html.haml {{1 }}
!!!
%html
%head
%title Test
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%body
= content_for?(:content) ? yield(:content) : yield
app / views / layouts / companies.html.haml
- content_for :content do
#main
= yield :main
#sidebar
= yield :sidebar
= render :template => 'layouts/application'
{ {1}} app / views / companies / index.html.haml
- content_for :main do
%h1 MainHeader
- content_for :sidebar do
%h1 SidebarHeader
И следующий файл спецификации:
spec / views /companies/index_spec.rb
require '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's content to include "MainHeader":
# ./spec/views/companies/index_spec.rb:7:in `block (2 levels) in '
Сначала я подумал, что в RSpec каким-то образом не хватает блоков content_for при рендеринге файлов представления. . Однако мне не удалось найти связанную с этим проблему в репозитории RSpec на github, поэтому я не уверен, кто здесь виноват.
Одно (недавнее) решение, которое я нашел, находится на http: // www. .dixis.com /? p = 571 . Однако, когда я пробую предложенный код
view.instance_variable_get(:@_content_for)
, он возвращает ноль.