アプリケーション内で動的サブドメインを使用する機能を正常に追加しました。問題は、Cucumber テストを実行すると、アプリケーションがサブドメインを含む redirect_to を実行すると、次のエラーが表示されることです。
features/step_definitions/web_steps.rb:27
the scheme http does not accept registry part: test_url.example.com (or bad hostname?)
ユーザーと選択したアカウントを作成し、ユーザーがサインアップフォームでサブドメインとして選択したものに基づいて指定されたサブドメインを使用して、ユーザーをログアウトメソッドにリダイレクトするサインアップコントローラーアクションがあります。ユーザー モデルとアカウント モデルが作成されて保存されると発生するリダイレクト アクションのコードを次に示します。
redirect_to :controller => "sessions", :action => "destroy", :subdomain => @account.site_address
これが私のレール3ルートです:
constraints(Subdomain) do
resources :sessions
match 'login', :to => 'sessions#new', :as => :login
match 'logout', :to => 'sessions#destroy', :as => :logout
match '/' => 'accounts#show'
end
上記の制約で指定されたサブドメインクラスのこれまでのコードは次のとおりです。
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
URLHelper を ApplicationController に追加しました。
class ApplicationController < ActionController::Base
include UrlHelper
protect_from_forgery
end
これは、上記の UrlHelper クラスのコードです。
module UrlHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
[subdomain, request.domain, request.port_string].join
end
def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end
上記のすべてのコードにより、ローカル ブラウザー内でサブドメインを正常に実行できます。Cucumber テストを実行すると、上記の問題が発生します。このテストでは、サインアップ ボタンをクリックすると、redirect_to が呼び出され、上記の例外がスローされます。
私の宝石ファイルは次のようになります。
require 'subdomain'
SomeApp::Application.routes.draw do
resources :accounts, :only => [:new, :create]
match 'signup', :to => 'accounts#new'
constraints(Subdomain) do
resources :sessions
match 'login', :to => 'sessions#new', :as => :login
match 'logout', :to => 'sessions#destroy', :as => :logout
match '/' => 'accounts#show'
end
end
私のテストを今すぐ機能させるための追加の方法を教えてください。修正、またはサブドメインを使用せずにメソッドをテストできる方法 (たとえば、アカウント名を取得するモックアウトされたメソッド) に興味があります。