1

私はRails 4とMultitenancyのチュートリアルに従っていますが、ユーザーが所有者としてサインインして、作成されたサブドメイン。Rails 4、Rspec、Factory Girl:URI :: InvalidURIError(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://#{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 

これはテストです:ここでは

require "rails_helper" 

feature "User sign in" do 
    extend SubdomainHelpers 

    let!(:account) { FactoryGirl.create(:account) } 
    let(:sign_in_url) {"http://#{account.subdomain}.example.com/sign_in"} 
    let(:root_url) {"http://#{account.subdomain}.example.com/"} 

    within_account_subdomain do 
    scenario "signs in as an account owner successfully" do 
     visit root_url 
     expect(page.current_url).to eq(sign_in_url) 
     fill_in "Email", :with => account.owner.email 
     fill_in "Password", :with => "password" 
     click_button "Sign in" 
     expect(page).to have_content("You are now signed in.") 
     expect(page.current_url).to eq(root_url) 
    end 
    end 
end 

は、工場は以下のとおりです。

アカウント:

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に精通していません。あなたが私にさらに何かを投稿する必要があるかどうか教えてください。

答えて

1

だから私は、これを解決:

問題は文字列としてaccount.subdomainを保っていた単一引用符を使用して、いくつかの理由で

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 

ファイル私SubdomainHelpersでした。二重引用符に変更するとすぐにテストは合格しました!

ありがとうございました。

+1

これは、一重引用符で囲まれた文字列には補間が行われないため、 '#{}'は文字通り解釈されるためです。二重引用符を使用することにより、補間が行われ、このコードが機能します。 –

+0

これを見てくれてありがとう! –

関連する問題