Rails에서 테스트 할 때 HTTP_REFERER를 어떻게 설정하나요?
컨트롤러를 테스트하는데 오류가 발생했습니다. 오류는 이해하지만 해결 방법을 모르겠습니다.
test: on CREATE to :user with completely invalid email should respond with
redirect
(UsersControllerTest):ActionController::RedirectBackError:
No HTTP_REFERER was set in the request to this action,
so redirect_to :back could not be called successfully.
If this is a test, make sure to specify request.env["HTTP_REFERER"].
어디에 지정 하시겠습니까? 나는 시도 시도했다 :
setup { post :create, { :user => { :email => 'invalid@abc' } },
{ 'referer' => '/sessions/new' } }
그러나 같은 오류가 발생했습니다.
정확히 무엇으로 지정합니까? 다시 돌아가고 싶은 뷰의 URI를 추측합니다.
'/sessions/new'
그게 무슨 뜻입니까?
좋아, 그래서 그들이 의미하는 것을 의미합니다.
setup do
@request.env['HTTP_REFERER'] = 'http://localhost:3000/sessions/new'
post :create, { :user => { :email => 'invalid@abc' } }, {}
end
문서화 된 위치를 말해 줄 수 있습니까? 그 정보의 맥락을 읽고 싶습니다.
도메인이 "localhost : 3000"이 아니면 어떻게됩니까? "localhost : 3001"또는 그 어떤 것이면 어떨까요? 예상 할 수있는 방법이 있습니까?
작동하지 않는 이유 :
setup { post :create, { :user => { :email => 'invalid@abc' } },
{ 'referer' => '/sessions/new' } }
Rails 문서는 헤더 를 설정하는 방법 이라고 말합니다 .
결혼식 추천은 다음과 같이 번역됩니다.
setup do
@request.env['HTTP_REFERER'] = 'http://test.com/sessions/new'
post :create, { :user => { :email => 'invalid@abc' } }
end
@request
변수가 존재하지 않기 때문에 허용 된 답변은 통합 테스트에서 작동하지 않습니다.
RailsGuides 에 따르면 헤더는 헬퍼에게 많은 수 있습니다.
레일 <= 4 :
test "blah" do
get root_path, {}, {'HTTP_REFERER' => 'http://foo.com'}
...
end
레일> = 5 :
test "blah" do
get root_path, params: { id: 12 }, headers: { "HTTP_REFERER" => "http://foo.com" }
...
end
질문에 대한 답변 :
작동하지 않는 이유 :
setup { post :create, { :user => { :email => 'invalid@abc' } },
{ 'referer' => '/sessions/new' } }
링크 한 Rails 문서 가 아마도 사용중인 클래스와 다른 클래스 를 문서화 하기 때문에 작동하지 .
에 연결했습니다 ActionController::Integration:Session
. 기능 테스트 (Test :: Unit를 사용하는 경우) 또는 컨트롤러 테스트 (Rspec을 사용하는 경우)를 작성하고 생각합니다. 어느 쪽이든, 당신은 아마도 ActionController::TestCase
또는 그 하위 클래스를 사용하고있을 것입니다 . 차례로 모듈 ActionController::TestProcess
.
ActionController::TestProcess
에서 제공하는 get
메소드와 다른 매개 변수가있는 get
메소드를 제공합니다 ActionController::Integration:Session
. (성가신가요?) 메소드 서명은 다음과 같습니다.
def get(action, parameters = nil, session = nil, flash = nil)
안타깝게도 헤더 매개 변수가 없습니다. 그러나 적어도 설정 @request.env['HTTP_REFERER']
은 작동합니다.
Rails3에서 동일한 오류가 발생했습니다.
해당 컨트롤러에서 "redirect_to : back"에 대한 구조를 제공하여이를 제거하려면
예 :redirect_to :back rescue redirect_to required_path
setup do
@request.env['HTTP_REFERER'] = 'http://test.com/sessions/new'
post :create, { :user => { :email => 'invalid@abc' } }
end
Rails 2.2.2에서 위 블록은 실제 테스트를 실행하지 않았습니다. 에 대해 말하는 것
post : create, {: user => {: email => 'invalid @ abc'}}
라인이 실행되지 않았습니다. 간단히 설정 블록을 제거하고 사용할 수 있습니다.
@request.env['HTTP_REFERER'] = 'http://test.com/sessions/new'
post :create, { :user => { :email => 'invalid@abc' } }
대신. 그리고 그것은 리퍼러를 설정해야합니다
위의 문제에 대한 가장 직접적인 해결책은 관련 헤더로 요청하는 것입니다. Rails는이 헤더를 자동으로 읽습니다.
post '/your-custom-route', {}, {'HTTP_REFERER': 'http://www.your-allowed-domain.com'}
참고 URL : https://stackoverflow.com/questions/542856/how-do-i-set-http-referer-when-testing-in-rails
'IT' 카테고리의 다른 글
'+'연산 초기 연결 (0) | 2020.09.14 |
---|---|
Java 애플리케이션의 악성 코드에 대한 샌드 박스 (0) | 2020.09.14 |
서비스 내 브로드 캐스트 혜택 (0) | 2020.09.14 |
Heroku의 두 앱간에 데이터베이스 공유 (0) | 2020.09.13 |
사용자에게 Chrome 확장 프로그램이 설치되어 있는지 확인 (0) | 2020.09.13 |