🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

926閲覧

【rspec】controllerのテストのやり方

k-810

総合スコア192

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2019/10/08 13:14

編集2019/10/09 00:21

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"以外にも正しくないところがあると思うのでご指摘していただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2019/10/08 23:39

エラーが起きているのは ./spec/controllers/api/v1/coupons_controller_spec.rb:100 です。 ここのcodeがなければわかりません。
k-810

2019/10/09 00:23

修正致しました。coupons_controller_spec.rb:100というファイルは存在しないのですが,エラーが起こっている箇所はcoupons_controller_spec.rbだと思われます。
winterboum

2019/10/09 00:59 編集

coupons_controller_spec.rb:100 というのはcoupons_controller_spec.rb のファイルの 100行目 という意味です。 が、、、 載せていただいたのにはそんなに行数無いですね。 載せたエラーメッセージが出た後修正していますか?
k-810

2019/10/09 02:47

はい,修正しています 99~102行目のところが it "renders json: @coupon" do get :show, :format => :json, params: { id: @coupon.id } expect(JSON.parse).to eq @coupon.attributes end にあたります
guest

回答1

0

ベストアンサー

エラーメッセージの行数と提示されたファイルの行数が合わないので???ですが、
すくなくとも一つエラーとなる所はあります
expect(JSON.parse)
これparseする文字列を引数に渡さないといけません。
多分 expect(JSON.parse response.body) あたりかと

投稿2019/10/09 01:02

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k-810

2019/10/09 04:17

解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問