복붙노트

[RUBY-ON-RAILS] 어떻게 레일에서 시험하기위한 기본 "www.example.com"도메인을 변경하려면 어떻게해야합니까?

RUBY-ON-RAILS

어떻게 레일에서 시험하기위한 기본 "www.example.com"도메인을 변경하려면 어떻게해야합니까?

내가 다른이에 액세스 무슨 도메인에 따라 역할을하는 레일 응용 프로그램이 (user.myapp.com 다르게 호출합니다 예를 www.myapp.com에 대한). 생산 사용이 모두 잘 작동하지만 내 테스트 코드는 항상 "www.example.com"의 호스트 이름을 본다.

테스트가 액세스 척하는 것 호스트 이름을 지정 갖는 깨끗한 방법이 있나요?

해결법

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

    1.

    @request.host = 'user.myapp.com'
    
  2. ==============================

    2.나는 모든 대답은 ... 불완전 여기에 가능한 모든 경우를 열거 할 생각 :

    나는 모든 대답은 ... 불완전 여기에 가능한 모든 경우를 열거 할 생각 :

  3. ==============================

    3.기능 사양에서, 호스트! 더 이상 사용되지 않습니다. 당신의 spec_helper.rb에 다음을 추가합니다 :

    기능 사양에서, 호스트! 더 이상 사용되지 않습니다. 당신의 spec_helper.rb에 다음을 추가합니다 :

    # Configure Capybara expected host
    Capybara.app_host = "http://test.domain"
    
    # Configure actual routes host during test
    before(:each) do
      default_url_options[:host] = <myhost>
    end
    

    요청 사양에서 호스트를 계속 사용! :

    host! "test.domain"
    

    (각) 블록, 또는 spec_helper.rb 수준의 요구 사양에 대한 글로벌 구성을 대안으로 전에 그것을 리팩토링 :

    RSpec.configure do |config|
      config.before(:each, type: :request) do
        host! "test.domain"
      end
    end
    
  4. ==============================

    4.기억해야 할 또 다른 것은 당신이 제대로 URL 헬퍼를 캡슐화 할 수 있도록 올바른 세션 인스턴스를 사용할 수 있는지 확인하는 것입니다.

    기억해야 할 또 다른 것은 당신이 제대로 URL 헬퍼를 캡슐화 할 수 있도록 올바른 세션 인스턴스를 사용할 수 있는지 확인하는 것입니다.

    통합 테스트는 기본 세션을 제공합니다. 당신은 당신의 테스트에서 직접 모든 세션 메서드를 호출 할 수 있습니다

    test "should integrate well" do
      https!
      get users_path
      assert_response :success
    end
    

    이러한 모든 헬퍼 변경하지 않을 경우 기본 세션 인스턴스를 사용하고있다 "www.example.com"로 이동합니다. 언급 한 바와 같이 호스트는 호스트를 수행하여 변경할 수 있습니다! ( "my.new.host")

    당신이 open_session 방법을 사용하여 여러 세션을 작성하는 경우, 당신은 항상 도우미 메서드를 호출 할 해당 인스턴스를 사용해야합니다. 이 적절하게 요청을 캡슐화합니다. 그렇지 않으면 다른 호스트를 사용할 수있는 기본 세션 인스턴스를 호출 레일 :

    test "should integrate well" do
      sess = open_session
      sess.host! "my.awesome.host"
      sess.get users_url             #=> WRONG! will use default session object to build url.
      sess.get sess.users_url        #=> Correctly invoking url writer from my custom session with new host.
      sess.assert_response :success
    end
    

    기본 세션 객체를 사용하고자한다면, 당신은뿐만 아니라 해당 호스트를 변경해야합니다 :

    test "should integrate well" do
      sess = open_session
      sess.host! "my.awesome.host"
      host! sess.host              #=> Set default session host to my custom session host.
      sess.get users_url
    end 
    
  5. ==============================

    5.RSpec에 요청 사양의 경우, 사용하기 전에 (각) {호스트! 'example.com'}

    RSpec에 요청 사양의 경우, 사용하기 전에 (각) {호스트! 'example.com'}

    더에서보기 : https://relishapp.com/rspec/rspec-rails/v/3-6/docs/request-specs/request-spec https://github.com/rspec/rspec-rails/issues/1662#issuecomment-241201056

  6. ==============================

    6.난 당신이 HTTP_HOST 또는 SERVER_NAME 환경이 라우터로 이동 요청을 변경 바르 수정할 수 있다고 생각합니다 :

    난 당신이 HTTP_HOST 또는 SERVER_NAME 환경이 라우터로 이동 요청을 변경 바르 수정할 수 있다고 생각합니다 :

    ENV['SERVER_NAME'] = "user.myapp.com"
    

    raw_host_with_port에서 actionpack / lib 디렉토리 / action_controller / request.rb 참조하십시오.

  7. ==============================

    7.@ request.host = '는 user.myapp.com'옳지 않다. 호스트를 사용한다! ( 'user.myapp.com')

    @ request.host = '는 user.myapp.com'옳지 않다. 호스트를 사용한다! ( 'user.myapp.com')

  8. ==============================

    8.I 제어기 테스트 및 기능 테스트와 모두 성공하지 request.host @ 호스트 !, 포스트 경로 인수 { 'SERVER_NAME'=> my_secret_domain} 많은 변화를 시도했다. 매우 악화, 그래서 많은 사람들이 그 접근 방법과 성공을보고했다.

    I 제어기 테스트 및 기능 테스트와 모두 성공하지 request.host @ 호스트 !, 포스트 경로 인수 { 'SERVER_NAME'=> my_secret_domain} 많은 변화를 시도했다. 매우 악화, 그래서 많은 사람들이 그 접근 방법과 성공을보고했다.

    나를 위해이 솔루션은 있었다 :

    request.headers["SERVER_NAME"] = my_secret_domain
    post path, args
    

    나는 루비 2.1.5p273, RSpec에 3.1.7 및 레일 4.2.0을 실행하는거야

  9. ==============================

    9.방법 중 아무도 나를 위해 일한 지점에서 다른 답변에서 제안합니다. 이것은 일 :

    방법 중 아무도 나를 위해 일한 지점에서 다른 답변에서 제안합니다. 이것은 일 :

    Capybara.configure { |config| config.default_host = "my.domain.com" }
    
  10. ==============================

    10.또 다른 답 :

    또 다른 답 :

    request.host = "user.myapp.com"
    

    나는 그것이 정답과 유사 알고 있지만, 나와 함께 곰하시기 바랍니다. 저는 명시 적 스텁을 선호하는 것, 최대 단지 일련의 일에 시험에 할당 작업을 좋아하지 않는다. 흥미롭게도,이 같은 스텁은 작동하지 않습니다 :

    allow(request).to receive(:host).and_return("user.myapp.com")
    

    나는 개인적으로이 혜택을받을 그 방법은, 하나는 두 번째,이 RSpec에의 두 배 베리 파이 유효성을 검사 할 것입니다 명시 적으로 그 그루터기, 시험 훈련의 일부입니다 말하는 것입니다, 할당을 통해 스텁 선호합니다.

  11. from https://stackoverflow.com/questions/598933/how-do-i-change-the-default-www-example-com-domain-for-testing-in-rails by cc-by-sa and MIT license