2013-09-08 12 views
9

これはしばらくの間迷惑をかける問題です。私はjsonでデータを受け取り、jsonで応答するAPI関数を構築しています。私のコントローラテストは正常に動作します(データはJSONからデコードされ、解答のみを解釈する必要があることを抽象化して以来)。Rails JSON API JSONのPARAMSを使用したPOSTリクエストのテスト

私はJSON引数でテストするためにcurlを使用しているので、関数がうまく動作することもわかります。 (例:curl -i --header "accept:application/json" - ヘッダー "Content-Type:application/json" -d '{"test":{"email":[email protected] "} } ')

しかし、明らかに私はこれを自動的にテストするためにリクエスト(機能)テストを書いていますが、私はそれがまるでカールのように動作するはずです。つまり、私はJSONで引数を渡して答えを得たいと考えています。すでにデコードされているので、人々が議論を扱うのを見ることができるすべての例があるので、私はかなり失われています。

私の質問は:これは責任があるので、私はそのレールが動作することをテストするので、引数とJSONとして要求を送信したいと思っている間違った前提に従っています。しかし、私は自分のコードが間違った議論にどれだけ堅牢で、JSONを試してみたいと思っていますか?このタイプの

何か:

it "should return an error if there is no correct email" do 
    params = {:subscription => {:email => "andre"}} 

    post "/magazine_subscriptions", { 'HTTP_ACCEPT' => "application/json", 'Content-Type' => 'application/json', 'RAW_POST_DATA' => params.to_json } 
end 

あなたはこれが可能である方法を知っていますか?あなたが私が間違ってテストしていると思ったら教えてください。

すべてのベスト、

アンドレ

答えて

17

私はここにポスト(RSpec request test merges hashes in array in POST JSON params)に私の答えを見つけ、私は、要求に対する引数が間違っ心配をしていたものを考えます。

はこれが働いた::json`:

簡潔にするために
it "should return an error if there is no correct email" do 
    params = {:subscription => {:email => "andre"}} 

    post "/magazine_subscriptions", params.to_json, {'ACCEPT' => "application/json", 'CONTENT_TYPE' => 'application/json'} 
end 
+5

は、 'ポスト '/ magazine_subscriptions'、params.to_json、フォーマットとしてそれを書きます。 – user664833

+0

@ user664833もっとエレガントです – Tudorizer

+2

すでにjsonオブジェクトとして書式設定している場合は、.to_jsonは必要ではないと思います。私はそれが 'post/magazine_subscriptions '、params、format :: json' –

1
describe '#create' do 
    let(:email) {'andre'} 
    let(:attrs) {{email: email}} 
    let(:params) {{format: :json, subscription: attrs}} 

    it "should return an error if there is no correct email" do 
    post "/magazine_subscriptions", params 
    end 
end 
+1

であるべきだと思います。最近のバージョンのレールの例を見つけるのは苦労しました。 'post '/ magazine_subscriptions'、subscription:subscription_params、format :: json'が私の鍵でした。 'to_json'は必要ありません。 – jrhorn424

関連する問題