2016-09-25 5 views
0

をテストするためにどのように、私は私のPurchasesControllerに書いた:Railsの4:私は実際にこのコントローラのアクションをテストするにはどうすればよいコントローラのアクション

私のRailsコンソールで好ましく
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では、レコードを作成し、ルートへのポストリクエストを行い、期待されるパラメータ:invoicetxn_idpayment_statusを渡すだけです。

それが役立つかどうか教えてください。

1

レールコンソールからコントローラをテストしないでください。

Railsのコントローラは、HTTP要求に応答します。着信要求に一致すると、ルーティングコンポーネントによってインスタンス化されます。したがって、HTTPリクエストを送信してレスポンスを検査することによってコントローラをテストします。

コントローラを手動でテストするには、コマンドラインツールcURLまたはブラウザベースのPostmanを使用してリクエストを送信します*。レールコンソールを使用して、データベースの変更などの副作用をチェックできます。

しかし、MinitestRSpecなどの自動テストツールを使用することを検討する必要があります。これは、アプリケーションを手動でテストするのが間違ったアプローチだからです。

+0

* - HTTPリクエストを送信するツールはたくさんあります。これらは、2つの非常に一般的な例です。 – max

+0

コンソールでコントローラをインスタンス化することはできますが、偽の要求を設定する必要があり、レールとラックの動作方法に関するかなりの知識が必要です。単にパスにパラメータを渡すことはできません。 – max

関連する問題