前提・実現したいこと
初学者でありrailsで数ヶ月勉強しており現在現場で使えるRuby on Rails速習実践ガイドを使用して勉強しています。その際にRSpecのテスト実行でSystem specの新規作成機能のテストを実行中に以下のエラーが出たので解決したいです。
発生している問題・エラーメッセージ
2019-11-03 12:28:01 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead. ...F. Failures: 1) 投稿管理機能 新規作成機能 新規作成画面でタイトルを入力したとき 正常に登録される Failure/Error: expect(page).to have_selector '.alert-success', text: '新規作成のテストを書く' expected to find css ".alert-success" but there were no matches # ./spec/system/posts_spec.rb:60:in `block (4 levels) in <top (required)>' Finished in 7.91 seconds (files took 10.07 seconds to load) 5 examples, 1 failure Failed examples: rspec ./spec/system/posts_spec.rb:59 # 投稿管理機能 新規作成機能 新規作成画面でタイトルを入力したとき 正常に登録される
該当のソースコード
posts_spec.rb
1require 'rails_helper' 2 3RSpec.describe '投稿管理機能', type: :system do 4 let(:user_a) { create(:user, name: 'ユーザーA', email: 'a@example.com') } 5 let(:user_b) { create(:user, name: 'ユーザーB', email: 'b@example.com') } 6 let!(:post_a) { create(:post, name: '最初の投稿', user: user_a ) } 7 8 before do 9 visit login_path 10 fill_in 'メールアドレス', with: login_user.email 11 fill_in 'パスワード', with: login_user.password 12 click_button 'ログインする' 13 end 14 15 shared_examples_for 'ユーザーAが作成した投稿が表示される' do 16 it { expect(page).to have_content '最初の投稿' } 17 end 18 19 describe '一覧表示機能' do 20 context 'ユーザーAがログインしている時' do 21 let(:login_user) { user_a } 22 23 it_behaves_like 'ユーザーAが作成した投稿が表示される' 24 end 25 26 context 'ユーザーBがログインしているとき' do 27 let(:login_user) { user_b } 28 29 it 'ユーザーAが作成した投稿が表示されない' do 30 expect(page).to have_no_content '最初の投稿' 31 end 32 end 33 end 34 35 describe '詳細表示機能' do 36 context 'ユーザーAがログインしているとき' do 37 let(:login_user) { user_a } 38 39 before do 40 visit post_path(post_a) 41 end 42 43 it_behaves_like 'ユーザーAが作成した投稿が表示される' 44 end 45 end 46 47 describe '新規作成機能' do 48 let(:login_user) { user_a } 49 50 before do 51 visit new_post_path 52 fill_in '投稿', with: post_name 53 click_button '登録する' 54 end 55 56 context '新規作成画面でタイトルを入力したとき' do 57 let(:post_name) { '新規作成のテストを書く'} 58 59 it '正常に登録される' do 60 expect(page).to have_selector '.alert-success', text: '新規作成のテストを書く' 61 end 62 end 63 64 context '新規作成画面でタイトルを入力しなかったとき' do 65 let(:post_name){''} 66 it 'エラーになる' do 67 within '#error_explanation' do 68 expect(page).to have_content 'タイトルを入力してください' 69 end 70 end 71 end 72 end 73end
新規作成機能でcreateアクションが関係していると思いました調べましたが分からず
class PostsController < ApplicationController before_action :set_post, only: [:show, :edit, :update, :destroy] def index @posts = current_user.posts.order(created_at: :desc) end def show end def new @post = Post.new end **def create @post = current_user.posts.new(post_params) if @post.save redirect_to @post, notice: "投稿「#{@post.name}」を登録しました。" else render :new end end ** def edit end def update @post.update!(post_params) redirect_to posts_url, notice: "投稿「#{post.name}」を更新しました。" end def destroy @post.destroy redirect_to posts_url, notice: "投稿「#{post.name}」を削除しました。" end private def post_params params.require(:post).permit(:name, :description) end def set_post @post = current_user.posts.find(params[:id]) end end
実際に.alert-successを記述している箇所も調べましたが分からずです。
application.html.slim
1body 2 header 3 nav.navbar.navbar-expand-lg.navbar-light.bg-whites 4 a.navbar-brand href="/" 5 img src="/images/logo.jpg" / 6 button.navbar-toggler aria-controls="navbarText" aria-expanded="false" aria-label=("Toggle navigation") data-target="#navbarText" data-toggle="collapse" type="button" 7 span.navbar-toggler-icon 8 #navbarText.collapse.navbar-collapse 9 ul.navbar-nav.mr-auto 10 - if current_user 11 li.nav-item.active= link_to 'Funファッション','/', class: 'nav-link' 12 li.nav-item.active= link_to '投稿一覧', posts_path, class: 'nav-link' 13 li.nav-item.active= link_to '新規投稿', new_post_path, class: 'nav-link' 14 - if current_user.admin? 15 li.nav-item.active= link_to 'ユーザー一覧', admin_users_path, class: 'nav-link' 16 li.nav-item.active= link_to 'ログアウト', logout_path, method: :delete, class: 'nav-link' 17 - else 18 li.nav-item.active= link_to 'Funファッション','/', class: 'nav-link' 19 li.nav-item.active= link_to '新規登録', new_admin_user_path, class: 'nav-link' 20 li.nav-item.active= link_to 'ログイン', login_path, class: 'nav-link' 21 22 .container 23 - if flash.notice.present? 24 .alert.alert-success= flash.notice 25 = yield 26
試したこと
フラッシュメッセージのテストを実行していることは分かったのですがそれに関係する箇所を予測しても分からず、恐れ入りますがもしわかる方いればご教授お願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/05 04:47 編集
2019/11/05 23:47