2016-08-04 20 views
2

コントローラの作成メソッドをテストするアプリケーション用のコントローラ仕様があります。作成アクションは実際にうまくいきますが、仕様が失敗しています。ハッシュPOSTパラメータを文字列に自動的に変換しているようです。私はputs couponを行う場合RSpecコントローラのテストでハッシュを文字列に変換する

let(:coupon) { attributes_for(:coupon) } 

describe 'POST #create' do 
    it 'should create a new coupon from params' do 
    expect { 
     post :create, :coupon => coupon 
    }.to change(Coupon, :count).by(1) 
    end 
end 

今は、データの有効なハッシュを生成している、とタイプがハッシュです。何らかの理由でコントローラがparams [:coupon]の文字列を受信して​​います。 rspecテストでのみこれが起こります。私がPOSTフォームでブラウズをテストすると、正常に動作します。

NoMethodError: 
    undefined method `permit' for #<String:0x00000005062700> 
    Did you mean? print 

を、私はRSpecのコントローラでputs params[:coupon].classをすれば、それは私に文字列を与える:

RSpecのは、次のようなメッセージがスローされます。なぜ私のハッシュをPOSTリクエストの文字列に変換するのでしょうか?これをどうやって防ぐことができますか? JSON APIエンドポイントをテストするとき、私はRailsの5.0.0と3.5.1 RSpecの

答えて

0

宝石open_taobaoは何とかテストで私のポストの要求を変換の問題だったようです。

1

にこれとまったく同じ動作を使用しています

は最近、私のために現れました。もともと私は私の対象としてこれを持っていた:

input_args
subject { put :my_endpoint, **input_args } 

と整数値を文字列に変換なっていました。修正はputに追加のキーワード引数としてformat: 'json'を追加しました:

subject { put :my_endpoint, **input_args, format: 'json' } 
+0

残念ながら、これは修正されていません。すでに様々なJSON関数を使用してテストしようとしています。私のクーポンのハッシュ全体が文字列に変換されています。コントローラでは、params.require(:coupon)を使用すると、ハッシュではなく文字列が取得されるため、ハッシュの値にはアクセスできません。 –

関連する問題