質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

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

Q&A

解決済

1回答

4030閲覧

Rspecでテストを実行しようとすると ArgumentError: wrong number of arguments (given 2, expected 0)と出てくる

keisuke713

総合スコア25

Ruby on Rails 5

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

0グッド

1クリップ

投稿2019/08/11 12:51

現在Twitterライクなアプリケーションを作っています。
ユーザーは投稿をし、その投稿にコメントをすることができるといったものです。
今回のエラーはコメントをする際に発生します。

Rspecを実行した際のエラー

1) CommentsController POST #create parameter is reasonable is registered Failure/Error: post :create, params: { user_id: user.id, post_id: post.id, comment: valid_attributes }, session: {} ArgumentError: wrong number of arguments (given 2, expected 0) # ./spec/controllers/comments_controller_spec.rb:67:in `block (5 levels) in <top (required)>' # ./spec/controllers/comments_controller_spec.rb:66:in `block (4 levels) in <top (required)>'

関連するコードは以下のようになっています。

comments_controller_spec.rb

RSpec.describe CommentsController, type: :controller do let(:user) { FactoryBot.create(:admin_user) } before do log_in user end let(:post) { user.posts.create(FactoryBot.attributes_for(:post)) } let(:valid_attributes) { FactoryBot.attributes_for(:comment) } describe "POST #create" do context "parameter is reasonable" do it "is registered" do expect { post :create, params: { user_id: user.id, post_id: post.id, comment: valid_attributes }, session: {} }.to change(Comment, :count).by(1) end it "redirect post page" do post :create, params: { user_id: user.id, post_id: post.id, comment: valid_attributes }, session: {} expect(response).to redirect_to post end end end end

app/controllers/comments_controller.rb

def create @post = Post.find(params[:post_id]) @comment = current_user.comments.build(comment_params) @comment.post = @post if @comment.save flash[:success] = 'success in commenting' redirect_to post_url(params[:post_id]) else render 'new' end end

factories/comments.rb

FactoryBot.define do factory :comment, class: Comment do content 'a' * 140 user post end end

comments_controller#createにブレークポイントを設定してもデバッガが起動しないことからそれより前でエラーが起きてると思います。

情報量が少なくて申し訳ありませんが、もし似たような事例を経験したことある方がいらっやいましたら、お聞かせください。

以上、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

let(:post) { user.posts.create(FactoryBot.attributes_for(:post)) } ``` が有るため、 expect { post :create, params: {}, session: {} } の post が get,post のpost ではなく、そっちのになってしまってるのでは? let(:post) を名前を変えてみたらどうなるでしょう。

投稿2019/08/11 20:32

winterboum

総合スコア23284

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

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

keisuke713

2019/08/12 00:49

仰る通り変数名を変えたらテスト通りました!親切に教えてくださり、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問