4

MVP (최소 실행 가능 제품)로 작업하고 있습니다. 관리 페이지를 보호하는 더 간단한 방법을 제공하기 위해 http_basic_authenticate_with를 AdminController에 추가했습니다.레일 건너 뛰기 RSpec 테스트에서 http_basic_authenticate_with 사용

문제는 내 AdminController을 테스트 할 때 로그인하지, 나는이 (401) "승인되지 않은"얻을 것입니다

이 시나리오에서는

, 그것은 인증을 테스트 무관입니다 -.으로 그냥 일시적으로, 그리고 빨리 다음 스프린트에 가면 제거 될 것입니다. 그래서 RSpec에서 건너 뛰려고합니다.

문제는 여러 가지 방법으로 시도했지만 아무 것도 작동하지 않는 것 같습니다.

예를 들어 인증을 피하기 위해 http_basic_authenticate_with를 수정하려고했습니다. 이와 같이 :

require 'spec_helper' 

module ActionController 
    module HttpAuthentication 
    module Basic 
     def http_basic_authenticate_with(*args) 
     end 
    end 
    end 
end 


describe Admin::SubscribersController do 
    describe "GET 'index'" do 
    it "should be OK" do 
     get 'index' 
     response.should be_successful 
    end 
    end 
end 

그러나 실행할 때 여전히 간단한 테스트를 위해 "false"가 반환됩니다.

Btw,이 테스트를 단순화하기 위해 AdminController에 빈 인덱스 조치가 있고 빈보기 (index.html.erb)가 있습니다.

답변

4

마침내 제대로 작동했습니다. 나를 위해 작동하지 않았다 문서에 명시된 바와 같이

뭔가 :

get 'index', nil, 'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials("admin", "password") 

그래서 나는 [ 'HTTP_AUTHORIZATION를'] request.env을 설정하는 것입니다있는, 그것을 위해 "오래된"접근 방식을 시도 :

request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("admin","password") 

다른 해결 방법은 없으므로이 중 하나만 사용하도록하겠습니다.

감사합니다.

0

인증을 테스트 할 수도 있고 테스트해야 할 수도 있습니다. 인증되지 않은 (지금은) 테스트를 작성하고 인증합니다. Testing HTTP Basic Auth in Rails 2.2+을 참조하십시오.

+0

감사합니다,하지만 내 경우에는 내가 그것을 피하고 싶어 (난 그냥 임시 아마도 다음 주에 이미 제거 될 것입니다 말한대로). 가능한가? 그것을 건너 뛰는 방법에 대한 제안? –

+0

어쩌면 당신은 전혀 테스트가 필요 없습니까? 그러나 당신은 그것을 피하기 위해 메타 프로그래밍을 할 수 있습니다. 가장 빠른 옵션입니다. 링크에서 찾은 방법은 ... –

+0

죄송합니다. 약간 잘못 생각한 것 같습니다. 위에 제시 한 예는 그저 예일뿐입니다. 내 실제 AdminController는 그렇게 될 수는 없지만 HTTP 인증은 임시적입니다. 나는 암호를 변경할 때 시험을 변경해야하기 때문에 시험 전에 인증하고 싶지 않았다. 생각을 건너 뛰면 더 쉽고 더 좋은 방법이 될 것입니다. 내가 건너 뛸 수있는 방법에 대한 예가 있다면 (내가 준 예가 내가 가진 유일한 생각이었다) 알려 주시기 바랍니다. –

3

컨트롤러에 대한 모든 테스트의 인증을 건너 뛰어도 괜찮 으면 여기에 현재 프로젝트에서 사용중인 기술이 있습니다.

unless Rails.env.test? http_basic_authenticate_with name: "slothbear", password: "kuniklo" end

+0

흠, 큰 소리로 타이핑 했으므로 조건을'if Rails.env.production? '으로 변경한다고 생각합니다. 개발 환경에서도 인증이 필요하지 않습니다. 나를 더 큰 생산성으로 이끌어 주셔서 감사합니다. – slothbear

+0

그리고'production? '을 테스트로 사용하지 않는 것이 좋습니다 : http://stackoverflow.com/q/8741398/2464 – slothbear