In einem Rails-3.2.14-App mit Ruby-2, mit rspec-Schienen 2.14.0 und Capybara 2.1.0 folgendes Merkmal spec einen Fehler verursacht:Capybara/RSpec 'have_css' Matcher nicht funktioniert, aber has_css tut
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
die Fehlermeldung lautet:
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.
Das Titelelement und korrekter Text ist auf der gerenderte Seite
Aber wenn ich ändern Sie diese Zeile in der Feature-spec:
expect(page).to have_css('title', text: "Todo")
dazu:
page.has_css?('title', text: "Todo")
dann der Test bestanden. [Edit - aber siehe Antwort unten von @JustinKo, dass dieser Test kein guter Test ist, wie es immer passieren wird]
Wie bekomme ich das have_css(...)
Formular zu arbeiten? Ist es ein Konfigurationsproblem?
Hier ist der relevante Teil meiner Gemfile
:
group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end
Und mein spec/spec_helper.rb
ist wie folgt aufgebaut:
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
Wer weiß, was ich tun könnte falsch sein?
bitte gehen Sie vor und diesen Beitrag lesen, vor allem das Capybara Teil http://nofail.de/2013/10/debugging -rails-applications-in-development/ – phoet
Wenn du nur 'page.has_css '(' title ', text:" Todo ") machst, wird der Test immer bestanden. 'has_css?' gibt einfach wahr oder falsch zurück, was nicht ausreicht, um einen Test zu beenden. Wenn Sie es ausgeben, werden Sie wahrscheinlich sehen, dass es falsch ist. Sind Sie sicher, dass die Seite ein Titelelement mit Text enthält? –
@JustinKo Vielen Dank für den Hinweis auf den Newbie-Fehler. Ja, der Titel wird mit dem entsprechenden Text angezeigt - im Browser überprüft. –