Rspec-rails: тестирование, если макет включает стили или javascripts - PullRequest
4 голосов
/ 13 ноября 2010

Я хочу проверить, связан ли мой 'style.css' с моей страницей при рендеринге с определенным макетом, например 'application.html.erb':

Итак, вот спецификация:

spec / views / layouts / application.html.erb_spec.rb

  it 'should include styles for screen media' do
    render
    rendered.should have_selector('link',
      :href => '/stylesheets/style.css',
      :media => 'screen',
      :rel => 'stylesheet',
      :type => 'text/css'
    )
  end

А мой application.html.erb выглядит так:

app / views / layouts / application.html.erb

<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <%= stylesheet_link_tag :style, :media => 'screen' %>
    <%= javascript_include_tag :defaults %>
    <%= csrf_meta_tag %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

Когда я запускаю мою спецификацию представления, она завершается ошибкой, потому что

<link href="/stylesheets/style.css?1289599022" media="screen" rel="stylesheet" type="text/css">

отображается и

<link rel='stylesheet' type='text/css' media='screen' href='/stylesheets/reset.css'/>

ожидается.

И это все о числах, добавленных рельсами «? 1289599022» после имени файла.Любые идеи о том, как проверить эту функциональность?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Попробуйте вместо этого использовать помощник Rails stylesheet_path () ... это сгенерирует URL с отметкой времени для вас.

it 'renders a link to the stylesheet' do
  render
  rendered.should have_selector('link',
    :rel => 'stylesheet',
    :media => 'screen',
    :href => stylesheet_path('style')
  )
end
0 голосов
/ 13 февраля 2011

Я столкнулся с той же проблемой сегодня, и это было очень сложно.Я пробовал решение выше, но не имел доступа к stylesheet_path (я использую тест контроллера rspec, но отображаю представление непосредственно из теста контроллера).Я попытался включить необходимый модуль, чтобы заставить его работать, но это только дало мне другие ошибки.В конце концов я решил просто сменить рельсы в тестовом режиме, чтобы он не генерировал метку времени актива.

Просто отредактируйте свой test.rb, включив в него строку:

ENV ['RAILS_ASSET_ID'] = ''

внутри

Testapp :: Application.configure do ... end

...