rails - rspec and capybara
El parche de Capybara/RSpec ''have_css'' no funciona, pero has_css sí (1)
Por defecto, Capybara solo busca elementos "visibles". El elemento principal (y su elemento de título) realmente no se consideran visibles. Esto da como resultado que el elemento title se ignore en have_css.
Puede obligar a Capibara a considerar también elementos no visibles mediante la opción :visible => false
.
expect(page).to have_css(''title'', :text => ''Todo'', :visible => false)
Sin embargo, sería más fácil usar el método have_title
:
expect(page).to have_title(''Todo'')
En la aplicación Rails 3.2.14 con Ruby 2, utilizando rspec-rails 2.14.0 y capybara 2.1.0, la siguiente especificación de funciones está causando un error:
require ''spec_helper''
feature ''View the homepage'' do
scenario ''user sees relevant page title'' do
visit root_path
expect(page).to have_css(''title'', text: "Todo")
end
end
El mensaje de falla es:
1) View the homepage user sees relevant page title
Failure/Error: expect(page).to have_css(''title'', text: "Todo")
Capybara::ExpectationNotMet:
expected to find css "title" with text "Todo" but there were no matches. Also
found "", which matched the selector but not all filters.
El elemento del título y el texto correcto están en la página representada
Pero cuando cambio esta línea en la especificación de características:
expect(page).to have_css(''title'', text: "Todo")
a esto:
page.has_css?(''title'', text: "Todo")
entonces la prueba pasa. [Editar - pero vea la respuesta a continuación de @JustinKo que esta prueba no es una buena prueba, ya que siempre pasará]
¿Cómo hago para que have_css(...)
el have_css(...)
? ¿Es un problema de configuración?
Aquí está la parte relevante de mi Gemfile
:
group :development, :test do
gem ''rspec-rails''
gem ''capybara''
end
Y mi spec/spec_helper.rb
está configurado de esta manera:
ENV["RAILS_ENV"] ||= ''test''
require File.expand_path("../../config/environment", __FILE__)
require ''rspec/rails''
require ''rspec/autorun''
require ''capybara/rails''
require ''capybara/rspec''
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
# out of the box rspec config code ommitted
config.include Capybara::DSL
end
Alguien sabe lo que podría estar haciendo mal?