rspecで詰まった話

環境

いいね機能のRSpecのrequestスペックで

require "rails_helper"

RSpec.describe "Api::V1::Current::Likes", type: :request do
  let(:user) { create(:user) }
  let(:post) { create(:post, user:) }
  let(:headers) { user.create_new_auth_token }

  describe "POST /api/v1/current/posts/:post_id/likes" do
    subject { post api_v1_current_post_likes_path(post_id: post.id), headers: }

    it "creates a new like for the post" do
      expect { subject }.to change { Like.count }.by(1)
      expect(response).to have_http_status(:created)
    end
  end

  describe "DELETE /api/v1/current/likes/:id" do
    subject { delete api_v1_current_like_path(id: like.id), headers: }

    let!(:like) { create(:like, user:, post: post) }

    it "deletes the like" do
      expect { subject }.to change { Like.count }.by(-1)
      expect(response).to have_http_status(:no_content)
    end
  end
end

と書き、テストを実行したところ。

1) Api::V1::Current::Likes POST /api/v1/current/posts/:post_id/likes creates a new like for the post
     Failure/Error: subject { post api_v1_current_post_likes_path(post_id: post.id), headers: headers }

     ArgumentError:
       wrong number of arguments (given 2, expected 0)
     # ./spec/requests/api/v1/current/likes_spec.rb:9:in

とエラーになってしまった。
どうやら「post」が名前衝突しているためにhttpのPOSTリクエストが通らなくなっているらしい。

原因は
let(:post) { create(:post, user:) }
と定義しているためで。
let(:test_post) { create(:post, user:) }
と名前を変更すると上手くいった。

という初心者のミスでした。
そもそも、postというテーブルを作ったのがよくなかった(articleとかがよかった?)