

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

Rspecを実行した際のエラー

[code]

      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)>'
    
    
[/code]

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

comments_controller_spec.rb

[code]

    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
    
[/code]

app/controllers/comments_controller.rb

[code]

    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
    
[/code]

factories/comments.rb

[code]

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

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

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

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


CC BY-SA 4.0
2019-08-11T12:50:06.743
57304
2019-08-11T17:06:08.177
35372
question
ruby-on-rails ruby
Rspecでテストを実行しようとすると ArgumentError: wrong number of arguments (given 2, expected 0)と出てくる


スタック・オーバーフローえようこそ！
`let(:post)`を書いたら、`Rspec`の`post`が上書きしちゃった。`let`で他のヴァリアブルを使うとできる。


CC BY-SA 4.0
2019-08-11T17:06:08.177
57308
2019-08-11T17:06:08.177
35431
57304
answer