rspecでコントローラーをテストしたい
render json: @couponのテストをしようとしたのですが上手くいきませんでした。
###controller
app/controllers/api/vi/coupons_controller.rb
class Api::V1::CouponsController < ApiController before_action :set_coupon, only: [:show] def show render json: @coupon end private def set_coupon @coupon = Coupon.find(params[:id]) end end
###rspec
以下が自分で書いてみたコードです。
app/controllers/api/vi/coupons_controller_spec.rb
require 'rails_helper' RSpec.describe Api::V1::CouponsController, type: :controller do describe "#show" do before do @coupon = create(:coupon) end it "responds successfully" do get :show, :format => :json, params: { id: @coupon.id } expect(response.headers).to have_content "json" end it "renders json: @coupon" do get :show, :format => :json, params: { id: @coupon.id } expect(JSON.parse).to eq @coupon.attributes end it "@couponが期待される値を持つ" do get :show, :format => :json, params: { id: @coupon.id } expect(assigns(:coupon)).to eq @coupon end end end
発生している問題・エラーメッセージ
2) Api::V1::CouponsController#show renders json: @coupon Failure/Error: expect(JSON.parse).to eq @coupon.attributes ArgumentError: wrong number of arguments (given 0, expected 1..2) # /bundle/gems/json-2.2.0/lib/json/common.rb:155:in `parse' # ./spec/controllers/api/v1/coupons_controller_spec.rb:100:in `block (4 levels) in <main>'
"renders json: @coupon"以外にも正しくないところがあると思うのでご指摘していただけるとありがたいです。
エラーが起きているのは
./spec/controllers/api/v1/coupons_controller_spec.rb:100
です。
ここのcodeがなければわかりません。
修正致しました。coupons_controller_spec.rb:100というファイルは存在しないのですが,エラーが起こっている箇所はcoupons_controller_spec.rbだと思われます。
coupons_controller_spec.rb:100 というのはcoupons_controller_spec.rb のファイルの 100行目 という意味です。
が、、、
載せていただいたのにはそんなに行数無いですね。
載せたエラーメッセージが出た後修正していますか?
はい,修正しています
99~102行目のところが
it "renders json: @coupon" do
get :show, :format => :json, params: { id: @coupon.id }
expect(JSON.parse).to eq @coupon.attributes
end
にあたります
回答1件
あなたの回答
tips
プレビュー