Rails 3 + Rspec 2: Тестирование content_for

Я использую 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)

, он возвращает ноль.

  • Есть ли способ проверить content_for в поле зрения спецификации?
  • Есть ли лучший способ структурировать мои файлы макета, чтобы я действительно мог их протестировать и при этом добиться того же конечного результата?

14
задан Tomas Mattia 4 November 2011 в 18:24
поделиться