コントローラの作成メソッドをテストするアプリケーション用のコントローラ仕様があります。作成アクションは実際にうまくいきますが、仕様が失敗しています。ハッシュ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の
残念ながら、これは修正されていません。すでに様々なJSON関数を使用してテストしようとしています。私のクーポンのハッシュ全体が文字列に変換されています。コントローラでは、params.require(:coupon)を使用すると、ハッシュではなく文字列が取得されるため、ハッシュの値にはアクセスできません。 –