我有一个使用子域来切换数据库的应用程序(多租户).我正在尝试使用Capybara进行集成测试,它确实依赖于子域.
我的理解是,设置Capybara.default_host=某些内容会使我的所有请求都来自此主机.似乎并非如此.在这篇文章中,作者建议只使用主机访问显式网址,但如果我在整个地方导航,这会变得有点烦人.我想设置主机,然后能够按预期使用我的rails路径.不知道我做错了什么,但这是我尝试过的:
# spec_helper.rb
RSpec.configure do |config|
config.before(:each, :type => :request) do
Capybara.default_host = 'http://app.mydomain.com'
end
end
# in some_integration_spec.rb
before do
puts "Capybara.default_host: #{Capybara.default_host}"
puts "some_app_url: #{some_app_url}"
end
Run Code Online (Sandbox Code Playgroud)
这产生了输出:
Capybara.default_host: http://app.mydomain.com
some_app_url: http://www.example.com/some_path
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么? default_host似乎什么都不做.正如我所说,我不想说visit(Capybara.default_host + some_app_path),因为每次都有点烦人.为什么还存在default_host选项?
这是我test.rb在Rails 3.1.12应用程序中的环境文件中的一行:
config.action_mailer.default_url_options = config.action_controller.default_url_options = { :host => "127.0.0.1", :port => 3000 }
Run Code Online (Sandbox Code Playgroud)
现在这是我做的测试:
subject { get :success }
subject.should redirect_to(:home)
Run Code Online (Sandbox Code Playgroud)
这会产生错误:
Failure/Error: subject.should redirect_to(:home)
Expected response to be a redirect to <http://127.0.0.1:3000/> but was a redirect to <http://test.host/>
Run Code Online (Sandbox Code Playgroud)
我做错了什么?或者,配置测试主机的位置?
这是spec_helper.rb文件以供完整参考.
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] = 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
# Requires supporting ruby files with custom matchers and macros, etc, …Run Code Online (Sandbox Code Playgroud)