Ожидается, что CSS «Home» вернет что-то RSpec проблема

#ruby-on-rails #testing #rspec #selector

#ruby-on-rails #тестирование #rspec #селектор

Вопрос:

Я пытаюсь заставить свой набор тестов работать, и у меня возникли некоторые проблемы.

 #home_controller_spec.rb
require 'spec_helper'

describe HomeController do
  describe "GET 'index'" do
    it "should be successful" do
      get 'index'
      response.should be_success
    end
    it "should have the right h2" do
      get 'index'
      response.should have_selector('h2', :content => 'Home')
    end
  end
end
  

Первый тест работает и проходит просто отлично. Каждый раз, когда я пытаюсь запустить

 response.should have_selector('[anything]')
  

это выдает эту ошибку:

 2) HomeController GET 'index' should have the right h2
   Failure/Error: response.should have_selector('h2','Home')
   expected css "Home" to return something
 # ./spec/controllers/home_controller_spec.rb:12:in `block (3 levels) in <top (required)>'
  

Я использую Rails 3.1 и RSpec 2.6 и уже удалил и переустановил Rspec. Тот же результат происходит во всех моих тестах контроллера.

Есть идеи, как исправить эту ошибку?

Заранее спасибо!

Редактировать: удалены все драгоценные камни. Переустановил все драгоценные камни. Переустановите RSpec, Capybara и Guard. Кажется, сейчас работает. Спасибо за помощь. Не уверен, что было не так.

Ответ №1:

По умолчанию RSpec не отображает шаблоны в спецификациях контроллера. Вы можете либо:

1) Переместите тест в спецификацию представления

2) Добавьте render_views в блок описания в спецификации контроллера, который затем отобразит шаблон.

Вариант 1 предпочтительнее IMO. Вы также можете использовать спецификацию запроса для проверки содержимого. Если вы пишете спецификации запроса, спецификации просмотра обычно излишни.

Комментарии:

1. Ранее у меня был ‘render_views’, и я просто попробовал его снова без изменений в поведении. Похоже, что ‘render_views’ не выполняет свою работу.

2. Интересное обновление: have_content(«[что-то]») работает правильно, а have_selector(«[что-то]») — нет.

3. Не могли бы вы отредактировать вопрос, чтобы показать спецификацию, которая не работает?

Ответ №2:

С rspec-rails gem V. 2.10.0 это сработало хорошо для меня

 it "should have the right title" do
  visit '/pages/howto'
  page.should have_selector("title", :text => "Abusa.me | Como funciona?")
end
  

Комментарии:

1. По какой-то причине это помогло мне, но я не понимаю, в чем разница между «visit» и «get». ‘visit’ заставляет его работать, а ‘get’ — нет. Почему это так?