Ruby on rails Rails 4、Rspec和Factory Girl:URI::InvalidURIError(多租户)
我正在学习Rails 4和Multitenancy的教程,但在尝试测试用户是否可以作为所有者登录并重定向到创建的子域时,我遇到了一个错误 这是测试错误:Ruby on rails Rails 4、Rspec和Factory Girl:URI::InvalidURIError(多租户),ruby-on-rails,ruby-on-rails-4,rspec,factory-bot,multi-tenant,Ruby On Rails,Ruby On Rails 4,Rspec,Factory Bot,Multi Tenant,我正在学习Rails 4和Multitenancy的教程,但在尝试测试用户是否可以作为所有者登录并重定向到创建的子域时,我遇到了一个错误 这是测试错误: Failures: 1) User sign in signs in as an account owner successfully Failure/Error: visit root_url URI::InvalidURIError: bad URI(is not URI?): http://#{a
Failures:
1) User sign in signs in as an account owner successfully
Failure/Error: visit root_url
URI::InvalidURIError:
bad URI(is not URI?): http://#{account.subdomain}.example.com
# /Users/developer/.rvm/gems/ruby-2.3.1/gems/capybara-2.10.1/lib/capybara/rack_test/browser.rb:71:in `reset_host!'
# /Users/developer/.rvm/gems/ruby-2.3.1/gems/capybara-2.10.1/lib/capybara/rack_test/browser.rb:21:in `visit'
# /Users/developer/.rvm/gems/ruby-2.3.1/gems/capybara-2.10.1/lib/capybara/rack_test/driver.rb:43:in `visit'
# /Users/developer/.rvm/gems/ruby-2.3.1/gems/capybara-2.10.1/lib/capybara/session.rb:240:in `visit'
# /Users/developer/.rvm/gems/ruby-2.3.1/gems/capybara-2.10.1/lib/capybara/dsl.rb:52:in `block (2 levels) in <module:DSL>'
# ./spec/features/users/sign_in_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.56981 seconds (files took 1.26 seconds to load)
11 examples, 1 failure, 6 pending
以下是工厂:
账户:
FactoryGirl.define do
factory :account, :class => Subscribe::Account do
sequence(:name) { |n| "Test Account ##{n}" }
sequence(:subdomain) { |n| "test#{n}" }
association :owner, :factory => :user
end
end
用户:
FactoryGirl.define do
factory :user, :class => Subscribe::User do
sequence(:email) { |n| "test#{n}@example.com" }
password "password"
password_confirmation "password"
end
end
我真的不熟悉BDD,如果您需要我发布更多信息,请告诉我。所以我解决了这个问题:
问题出在我的SubdomainHelpers文件中
module SubdomainHelpers
def within_account_subdomain
### This Line Is the original line
let(:subdomain_url) { 'http://#{account.subdomain}.example.com' }
### Changed it to this
let(:subdomain_url) { "http://#{account.subdomain}.example.com" }
before { Capybara.default_host = subdomain_url }
after { Capybara.default_host = 'http://www.example.com' }
yield
end
end
出于某种原因,使用单引号将account.subdomain
保留为字符串;我一改双引号,测试就通过了
谢谢 之所以会出现这种情况,是因为单引号字符串没有对其执行插值,因此
#{}
是按字面意思执行的。通过使用双引号的strong,将进行插值,并且该代码将正常工作。
module SubdomainHelpers
def within_account_subdomain
### This Line Is the original line
let(:subdomain_url) { 'http://#{account.subdomain}.example.com' }
### Changed it to this
let(:subdomain_url) { "http://#{account.subdomain}.example.com" }
before { Capybara.default_host = subdomain_url }
after { Capybara.default_host = 'http://www.example.com' }
yield
end
end