복붙노트

[RUBY-ON-RAILS] RSpec에 설정된 하위 도메인을 레일

RUBY-ON-RAILS

RSpec에 설정된 하위 도메인을 레일

내 응용 프로그램을 테스트하기 위해 RSpec을 사용하고 있습니다. 내 응용 프로그램 컨트롤러에서 나는 그래서 같은 방법이있다 :

def set_current_account
  @current_account ||= Account.find_by_subdomain(request.subdomains.first)
end

내 사양의 request.subdomain을 설정할 수 있습니까? 아마 전에 블록? 여기에 대한 조언이 큰 감사 것, 그래서 나는 RSpec에 새로운 오전.

EEF

해결법

  1. ==============================

    1.나는이 문제를 정렬하는 방법을 알아 냈어.

    나는이 문제를 정렬하는 방법을 알아 냈어.

    내 사양 내 이전 블록에서 단순히 추가 :

    before(:each) do
      @request.host = "#{mock_subdomain}.example.com"
    end
    

    request.subdomains.first까지이 설정은 mock_subdomain의 값이 될 수 있습니다.

    그 그물에 다른 곳에서는 아주 잘 설명하지 희망의 사람이 유용한를 찾습니다.

  2. ==============================

    2.나는이 상대적으로 오래된 질문입니다 알지만,이 종류의 테스트를 실행중인 제품에 따라 달라집니다 것으로 나타났습니다. 나는 확실히 몇 가지이 질문은 질문을 받았다 이후 변경된 해요 그래서 나는 또한, 레일 4 RSpec에 3.2를 실행하고 있습니다.

    나는이 상대적으로 오래된 질문입니다 알지만,이 종류의 테스트를 실행중인 제품에 따라 달라집니다 것으로 나타났습니다. 나는 확실히 몇 가지이 질문은 질문을 받았다 이후 변경된 해요 그래서 나는 또한, 레일 4 RSpec에 3.2를 실행하고 있습니다.

    요청 사양

    before { host! "#{mock_subdomain}.example.com" }
    

    카피 바라와 기능 사양

    before { Capybara.default_host = "http://#{mock_subdomain}.example.com" }
    after  { Capybara.default_host = "http://www.example.com" }
    

    나는 보통 사양 / 지원 모듈을 만드는 것이 다음과 같이 뭔가 :

    # spec/support/feature_subdomain_helpers.rb
    module FeatureSubdomainHelpers
      # Sets Capybara to use a given subdomain.
      def within_subdomain(subdomain)
        before { Capybara.default_host = "http://#{subdomain}.example.com" }
        after  { Capybara.default_host = "http://www.example.com" }
        yield
      end
    end
    
    # spec/support/request_subdomain_helpers.rb
    module RequestSubdomainHelpers
      # Sets host to use a given subdomain.
      def within_subdomain(subdomain)
        before { host! "#{subdomain}.example.com" }
        after  { host! "www.example.com" }
        yield
      end
    end
    

    사양 /의 rails_helper.rb에 포함 :

    RSpec.configure do |config|
      # ...
    
      # Extensions
      config.extend FeatureSubdomainHelpers, type: :feature
      config.extend RequestSubdomainHelpers, type: :request
    end
    

    그럼 당신은 지금처럼 사양 내에서 호출 할 수 있습니다 :

    feature 'Admin signs in' do
      given!(:admin) { FactoryGirl.create(:user, :admin) }
    
      within_subdomain :admin do
        scenario 'with valid credentials' do
          # ...
        end
    
        scenario 'with invalid password' do
          # ...
        end
      end
    end
    
  3. ==============================

    3.레일에서 3 모든 I 수동으로 호스트가 작동하지 않았다 설정할 수 있지만 나는 그들이 당신이 얻을 같은 요청 도우미로 전달 경로를 분석하는 방법을 잘 알게 코드를보고했습니다. 컨트롤러가 가고 있다면 과연 하위 도메인 및 @king_of_the_castle로 저장합니다에서 언급 된 사용자를 가져옵니다

    레일에서 3 모든 I 수동으로 호스트가 작동하지 않았다 설정할 수 있지만 나는 그들이 당신이 얻을 같은 요청 도우미로 전달 경로를 분석하는 방법을 잘 알게 코드를보고했습니다. 컨트롤러가 가고 있다면 과연 하위 도메인 및 @king_of_the_castle로 저장합니다에서 언급 된 사용자를 가져옵니다

    it "fetches the user of the subomain" do
      get "http://#{mock_subdomain}.example.com/rest_of_the_path"
      assigns[:king_of_the_castle].should eql(User.find_by_name mock_subdomain)
    end
    
  4. ==============================

    4.크리스 피터스 '대답은 요청 사양 나를 위해 일하지만, 기능 사양, 나는 다음과 같이 변경했습니다 :

    크리스 피터스 '대답은 요청 사양 나를 위해 일하지만, 기능 사양, 나는 다음과 같이 변경했습니다 :

    rails_helper :

    Capybara.app_host = 'http://lvh.me'
    Capybara.always_include_port = true
    

    feature_subdomain_helpers :

    module FeatureSubdomainHelpers
        def within_subdomain(subdomain)
            before { Capybara.app_host = "http://#{subdomain}.lvh.me" }
            after  { Capybara.app_host = "http://lvh.me" }
            yield
        end
    end
    
  5. from https://stackoverflow.com/questions/2556627/rails-rspec-set-subdomain by cc-by-sa and MIT license