【Rails/Rspec】fill_in メソッドが通らない

実現したいこと

Rails/Rapecのテストについて、fill in メソッドを用いたテストが通過しません。

前提

SNS風のアプリを作っており、投稿機能があって、投稿が上手くいくかのテストを行っています。
(Rails s でブラウザ上で目視でテストを行った所、ポストの投稿は上手く行きました)

〇環境
ruby  3.1.0
rails 7.1.2
capybara 3.38.0
rspec-rails 5.1.1

下記に記載する一番目ソースコードの21~26行目でエラーが出ています。(関連するビューやコントローラーのコードも載せておきます)
発生しているエラーメッセージは以下です。

Posts Post#create case in valid check can post Failure/Error: fill_in post[content] ,with: 'xxx' ArgumentError: wrong number of arguments (given 0, expected 1) # ./spec/sysytem/posts_spec.rb:50:in `block (4 levels) in <main>'

該当のソースコード

/system/posts_spec.rb

ruby

1require 'rails_helper'2 3RSpec.describe "Posts", type: :system do4 let(:user) { FactoryBot.create(:user) }5 6 before do7 driven_by(:rack_test)8 end9 10 ###################(省略)###################11 12 describe 'Post#create' do13 before do14 FactoryBot.send(:user_with_posts, posts_count: 35)15 @user = Post.first.user 16 @user.password = 'password'17 log_in(@user)18 visit new_post_path 19 end 20 21 context 'case in valid' do22 it 'check can post' do23 fill_in post[content] ,with: 'xxx'24 click_button 投稿する 25 end26 end 27 end 28end

/factories/post.rb

ruby

1FactoryBot.define do2 3 factory :post, class: Post do4 content { '素晴らしい!' }5 created_at { 5.minutes.ago }6 end7 8 factory :ramen, class: Post do9 content { '美味しかった!' }10 created_at { 10.minutes.ago }11 end12 13 factory :most_recent, class: Post do14 content { 'good!' }15 created_at { Time.zone.now }16 user { association :user, email: 'recent@restaurantchooser.com',password: "password",password_confirmation: "password" }17 end18end19 20def user_with_posts(posts_count: 5)21 FactoryBot.create(:user) do |user|22 FactoryBot.create_list(:ramen, posts_count, user: user)23 end24end25

posts_controller.rb

ruby

1class PostsController < ApplicationController2 before_action :logged_in_user, only: [:new,:create,:edit,:update,:destroy]3 before_action :check_user ,only: [:edit,:update,:destroy]4 def new5 @post = current_user.posts.build 6 end 7 8 def create9 @post = current_user.posts.build(post_params)10 if @post.save 11 flash[:success] = "ポストを投稿しました"12 redirect_to users_path 13 else14 render '/posts/new', status: :unprocessable_entity15 end16 end17 18 def edit19 20 end21 22 def update23 24 end 25 26 def destroy27 @post.destroy 28 flash[:success] = "ポストを削除しました"29 redirect_to users_path 30 end31 32 private33 34 #strongparameter35 def post_params36 params.require(:post).permit(:content)37 end38 39 #ユーザー確認40 def check_user41 @post = current_user.posts.find_by(id:params[:id])42 redirect_to users_path, status: :see_other if @post.nil?43 end 44 end45

/view/posts/new.html.erb

html

1<h1>ポストする</h1>2<div class="row">3 <div class="col-md-6 col-md-offset-3">4 <%= form_with(model: @post) do |f| %> 5 <%= render 'shared/error_messages', object: f.object %> 6 <%= f.text_area :content, ,id:'post-content' %> 7 <%= f.submit "投稿する", class: "btn btn-primary" %> 8 <% end %> 9 10 </div>11</div>

routes.rb

ruby

1Rails.application.routes.draw do2 get 'password_resets/new'3 get 'password_resets/edit'4 root "static_pages#home"5 get "/signup", to: "users#new"6 get "/login", to: "sessions#new"7 post "/login", to: "sessions#create"8 delete "logout", to: "sessions#destroy"9 resources :users10 resources :account_activations, only: [:edit]11 resources :password_resets, only: [:new, :create, :edit, :update]12 resources :posts, only: [:new,:create, :destroy]13end14

試したこと

fill_inの第一引数をhtmlのタグのnameやidの値にしてみても上手くいきません。
他にも必要な情報があればお申し付けください。

補足情報(FW/ツールのバージョンなど)

コメントを投稿

0 コメント