#ruby-on-rails #rspec #capybara
#ruby-on-rails #rspec #capybara
Вопрос:
Надеюсь, кто-нибудь увидит, что я упустил из виду…
Я пытаюсь заставить Capybara работать в небольшом существующем приложении … и у меня ничего не получается.
Gemfile:
group :development, :test do
gem 'rspec-rails'
# gem 'webrat'
gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git'
end
...
Похожие спецификации в двух местах выходят из строя по разным причинам. Не уверен, почему?
спецификация /контроллеры/pages_controller_spec.rb:
require 'spec_helper'
describe PagesController do
describe "GET 'about'" do
it "should be successful" do
# get 'about' #worked w/ webrat
# response.should be_success #worked w/ webrat
visit pages_about_path
# page.should have_content('About Us')
page.html.should match(/About/i)
end
it "should have title" do
# get 'about' #webrat
# response.should have_selector("title", :content => "About Us") #webrat
visit pages_about_path
page.should have_selector("title")
end
end
end
Сбои:
(может быть, загружается какая-то общая страница, как doctype в браузере "<!DOCTYPE html>"
)
1) PagesController GET 'about' should be successful
Failure/Error: page.html.should match(/About/i)
expected "<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">nn" to match /About/i
# ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
2) PagesController GET 'about' should have the right title
Failure/Error: page.should have_selector("title")
expected css "title" to return something
# ./spec/controllers/pages_controller_spec.rb:20:in `block (3 levels) in <top (required)>'
спецификация /просмотры / страницы/about.html.haml_spec.rb:
require 'spec_helper'
describe "pages/about.html.haml" do
it "renders attributes in <p>" do
# render #webrat
# rendered.should match(/About/) #webrat
visit pages_about_path
page.should have_content("About Us")
end
it "should have the right heading" do
# render #webrat
# rendered.should have_selector("h2", :content => "About Us") #webrat
visit pages_about_path
page.should have_selector("h2")
end
end
Сбои:
1) pages/about.html.haml renders attributes in <p>
Failure/Error: visit pages_about_path
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000101dc2970>
# ./spec/views/pages/about.html.haml_spec.rb:8:in `block (2 levels) in <top (required)>'
2) pages/about.html.haml should have the right heading
Failure/Error: visit pages_about_path
NoMethodError:
undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1:0x000001034b1d98>
# ./spec/views/pages/about.html.haml_spec.rb:16:in `block (2 levels) in <top (required)>'
Комментарии:
1. Пожалуйста, отметьте nigelr (или того, кто, по вашему мнению, этого заслуживает) в качестве принятого ответа для других, у кого может возникнуть эта проблема, и в качестве обычной вежливости.
Ответ №1:
Только что столкнулся с той же проблемой и обнаружил, что capybara нуждается:
response.body.should have_selector("title")
webrat не нуждается в .Тело
кроме того, убедитесь, что вы визуализируете представления, например:.
describe PagesController do
render_views
Комментарии:
1. Это ответ. Кроме того, если вы переходите из railstutorial.org Я полагаю, вам также необходимо изменить :content => «что угодно» на :title => «что угодно». В противном случае он проходит независимо от содержимого.
2. Я думаю, yakiimo означает, что
have_selector("title", :content => "Home")
становитсяhave_selector("title", :text => "Home")
. Я также обнаружил, чтоhave_selector("a", :href => "/users?page=2", :content => "Next")
изменения вhave_link("Next", :href => "/users?page=2")
. Я нахожу полезными примеры «до» и «после» в этом сообщении в блоге: Переход с Webrat на Capybara .
Ответ №2:
Вы должны включить capybara DSL в свой тестовый файл :
require 'spec_helper'
describe PagesController do
include Capybara::DSL
describe "GET 'about'" do
it "should be successful" do
...
Ответ №3:
Это не решит всех ваших проблем, но вместо:
page.html.should match(/About/i)
попробуйте:
page.should match(/About/i)
(возможно, вам даже не понадобится страница).
Кроме того, убедитесь, что Capybara настроен на использование CSS-запросов в env.rb (по умолчанию используется XPath).
Комментарии:
1. Удаление ‘html.’ не сработало. Кроме того, в Capybara’s read me говорится: «Capybara не пытается угадать, какой тип селектора вы собираетесь ему предоставить, и всегда будет использовать CSS по умолчанию . Если вы хотите использовать XPath, вам нужно будет сделать … » Видя ошибку » неопределенный метод `visit’ » заставляет меня думать, что Capybara неправильно установлена или ссылается на нее … но не уверен, как подтвердить !?!
2. Хм, генерируемый env.rb Cucumber говорит «Capybara по умолчанию использует селекторы XPath, а не CSS3 по умолчанию Webrat». Но да, похоже, что он не поддерживает Capybara. Вы пробовали запускать через Bundler? пакет exec cucumber
3. не использую Cucumber … на самом деле не хочу … возможно, проблема в этом?
Ответ №4:
Убедитесь, что в вашем spec_helper.rb
файле вверху указано следующее:
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
У меня была похожая проблема, как у вас (т. Е. undefined method 'visit'
), и добавление этих строк решило проблему.