在使用Ruby 2的Rails 3.2.14应用程序中,使用rspec-rails 2.14.0和capybara 2.1.0,以下功能规范导致失败:
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
失败消息是:
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.
呈现的网页上的标题元素和正确的文字
但是当我在功能规范中更改此行时:
expect(page).to have_css('title', text: "Todo")
到此:
page.has_css?('title', text: "Todo")
然后测试通过了。 [编辑 - 但请参阅以下来自@JustinKo的回复,该测试不是一个好的测试,因为它总是会通过]
如何让have_css(...)
表单生效?这是配置问题吗?
以下是我Gemfile
的相关部分:
group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end
我的spec/spec_helper.rb
设置如下:
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
任何人都知道我可能做错了什么?
答案 0 :(得分:16)
默认情况下,Capybara只查找“可见”元素。头元素(及其标题元素)实际上并不可见。这导致在have_css中忽略title元素。
您可以强制Capybara通过:visible => false
选项考虑不可见元素。
expect(page).to have_css('title', :text => 'Todo', :visible => false)
但是,使用have_title
方法会更容易:
expect(page).to have_title('Todo')