2016-09-25 3 views
0

을 테스트하는 방법, 내 PurchasesController에 쓴 :레일 4 : 나는 실제로이 컨트롤러의 동작을 테스트하려면 어떻게 컨트롤러 액션

내 레일 콘솔을 바람직하게
protect_from_forgery except: [:hook] 
def hook 
    params.permit! # Permit all Paypal input params 
    status = params[:payment_status] 
    if status == "Completed" 
     @purchase = Purchase.find(params[:invoice]) 
     @purchase.update_attributes(status: status, transaction_id: params[:txn_id], purchased_at: Time.now) 
     @purchase.save! 
     @user = @tool.user 
     @user.earned_money += @tool.price 
     @user.save! 
    end 
    render nothing: true 
end 

?

경로 :

post "/purchases/:id" => "purchases#show" 
post "/hook" => "purchases#hook" 
+0

콘솔을 통해 테스트하고 싶습니까? –

+0

@Shabini Rajadas 경로에 매개 변수를 전달하고 데이터베이스가 제대로 작동하는지 확인할 수 있다고 생각했지만 잘못된 것이 었습니다. 그게 가능하니? – Gugubaight

답변

0

난 당신이/다른 작업이 수행되는 추상적 분리하지 않는 한 당신이 당신의 콘솔을 통해이 문제를 테스트 할 수 있습니다 완전히 확실하지 않다 다음 독립적 단위를 테스트합니다. RSpec/Minitest를 사용하면 레코드를 만들고 경로에 대한 게시 요청을 수행하여 예상 매개 변수를 전달해야합니다 (invoice, txn_id, payment_status).

도움이되는지 알려주세요.

1

레일 콘솔을 통해 컨트롤러를 테스트하지 마십시오.

컨트롤러는 HTTP 요청에 응답합니다. 들어오는 요청과 일치 할 때 라우팅 구성 요소에 의해 인스턴스화됩니다. 따라서 HTTP 요청을 보내고 응답을 검사하여 컨트롤러를 테스트 할 수 있습니다.

명령 줄 도구 cURL 또는 브라우저 기반 우체부를 사용하여 컨트롤러를 수동으로 테스트하여 * 요청을 보낼 수 있습니다. 레일스 콘솔을 사용하여 데이터베이스 변경과 같은 부작용을 검사 할 수 있습니다.

그러나 수동으로 응용 프로그램을 테스트 할 때 결함이있는 접근 방법이므로 Minitest 또는 RSpec과 같은 자동화 된 테스트 도구를 사용하는 것이 좋습니다.

+0

* - HTTP 요청을 보내는 데 사용할 수있는 도구가 많이 있습니다. 이들은 단지 두 가지 매우 대중적인 예입니다. – max

+0

콘솔에서 컨트롤러를 인스턴스화 할 수는 있지만 가짜 요청을 설정해야하며 레일 및 랙 작동 방식에 대한 지식이 필요합니다. '경로에 매개 변수 전달'만 할 수는 없습니다. – max

관련 문제