我正在尝试在Rails 4项目中使用带有capybara-webkit的Rspec,但我收到错误,因为没有正确设置Capybara.default_host。
webkit_server已正确安装并位于PATH中。
我已将以下宝石添加到 Gemfile :
group :test do
gem 'rspec-rails', "~> 2.12"
gem 'factory_girl'
gem 'capybara', '2.0.3' # capybara-webkit works with this version
gem 'capybara-webkit'
gem 'database_cleaner', :git => 'git://github.com/bmabey/database_cleaner.git'
gem 'email_spec'
end
我的 spec_helper.rb 包含以下内容:
require 'capybara'
require "capybara-webkit"
RSpec.configure do |config|
config.include(EmailSpec::Helpers)
config.include(EmailSpec::Matchers)
config.include Capybara::DSL, :type => :request
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.start
end
end
Capybara.default_host = '127.0.0.1:3001'
Capybara.run_server = true
Capybara.javascript_driver = :webkit
这是我的测试:
require 'spec_helper'
feature 'A feature' do
include Capybara::DSL
scenario 'first scenario', :js => true do
visit login_url
page.current_url.should eq('http://127.0.0.1:3001/login')
...
end
end
我收到的错误是:
[16:40:24] paul@Pro2:web $ rspec spec/features/my_spec.rb
Run options: include {:locations=>{"./spec/features/my_spec.rb"=>[165]}}
F
Failures:
1) A feature - first scenario
Failure/Error: page.current_url.should eq('http://127.0.0.1:3001/login')
expected: "http://127.0.0.1:3001/login"
got: "http://example.iana.org/"
(compared using ==)
# ./spec/features/my_spec.rb:8:in `block (2 levels) in <top (required)>'
Finished in 1.69 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/features/my_spec.rb:8 # A feature - first scenario
Randomized with seed 54529
看起来它正在使用example.org作为主机名,这是测试环境的默认设置。
有什么建议吗?
更新:原来这不是错误,但它是设计的。解决方案是永远不要使用* _url而是* _path(绝对与相对):
visit login_path
page.current_path.should eq(login_path)
答案 0 :(得分:3)
这个问题不是Rails 4特有的。我之前在Rails 3中遇到过这个问题。
我尝试了几种设置,但最终找到了最佳解决方案,即将所有url
更改为path
。例如:
visit login_path
page.current_path.should eq('/login')
实际上我们不需要添加主机来使这个测试有意义。通过这种方式,您的测试将不依赖于它们正在运行的任何服务器。无论你的,同行,CI服务器等等。
答案 1 :(得分:0)
您还需要在规范帮助文件中包含require 'capybara/rspec'
。