我正在尝试在 Rails 4 项目中将 Rspec 与 capybara-webkit 一起使用,但由于 Capybara.default_host 设置不正确而出现错误。
webkit_server 已正确安装并位于 PATH 中。
我已将以下 gem 添加到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)