#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’ — нет. Почему это так?