2017-08-03 12 views
1

私のテストでは、利用可能な制限(例えば、そのオファーで10席)がすべて販売されているかどうかを確認する必要があります。期限が切れています。私はちょうど要求スペックで動作するようにPUTリクエストを取得することはできませんrails request spec jsonのPUTメソッドが終了しない

、ここで私は

put '/offers/'<<offer.id.to_s<<".json", params: { offer: payload } 

あるいは

put '/offers/'<<offer.id.to_s<<".json", payload 
を含む多くのハックをしようとしたと言って

RSpec.describe "Offers", type: :request do 
    describe "gives not found response" do 

    it "when available limit exhausts before date till available" do 
     offer = Offer.new 
     Timecop.freeze(Date.today - 12.days) do 
      offer = FactoryGirl.create(:offer) 
     end 
     payload = FactoryGirl.attributes_for(:offer, :available_limit => 0, :discount_id => offer.discount.id, :coupon_id => offer.coupon.id) 
     sign_in 
     put '/offers/'<<offer.id, params: { id: offer.id, offer: payload }, as: :json 
     get "/vouchers/"<<offer.coupon.voucher_code 
     expect(response.status).to eq 404 
    end 
    end 
end 

針は私のコードです

私が気づいたのは、リクエストのいずれかの組み合わせで、リクエストが通過しましたが、 H HTMLやJSON形式私はカピバラの下でそれらを実行しているわけではないとして、スペックでエラーにつながる(と私はどちらかにしたくない)

答えて

1

私はあなたがformat: :jsonないas: :json

てみ使用したいと思うの両方:

params = { id: offer.id, offer: payload } 
put :offers, params: params, format: :json 
+1

最近のバージョンで 'format::json'が' as::json'に変更されましたが、私はそれが壊れているとは思わない。 –

2

これらのパスを構築するのに<<を使用しないでください。 idに<<を使用すると、idの整数値に相当する文字コードが挿入されます。

通常の文字列補間を使用してください。

put "/offers/#{offer.id}", params: { id: offer.id, offer: payload }, format: :json 
get "/vouchers/#{offer.coupon.voucher_code}" 

format: :json部分にも気付いています。

+2

最新のstableテストブランチでは、プロセスのメソッド。ここでは、署名の代わりに 'as::son'があります。https://github.com/rails/rails/blob/0a4d1c3cdeaf387b4cb4288462084c8ee1a9b039/actionpack/lib/action_dispatch/testing/integration.rb#L33 –

+0

'put" /offers/#{offer.id} "、params:{id:offer.id、offer:payload}、::json'はうまくいった! –

関連する問題