rspecを実行したときに発生したエラーの解決について
解決したいこと
Ruby on RailsでBookのwebページを作成しています。
rspecを実行したところ、ターミナルに以下のエラー文の記載がありました。
解決方法を教えてください。
発生しているエラー
Book モデルに関するテスト
実際に保存してみる
有効な投稿内容の場合は保存されるか
空白のバリデーションチェック
titleが空白の場合にバリデーションチェックされ空白のエラーメッセージが返ってきているか
bodyが空白の場合にバリデーションチェックされ空白のエ ラーメッセージが返ってきているか
titleを空白で投稿した場合に画面にエラーメッセージが表示されているか
エラーメッセージは正しく表示されるか
bodyを空白で投稿した場合に画面にエラーメッセージが表示 されているか
エラーメッセージは正しく表示されるか
投稿のテスト
トップ画面(root_path)のテスト
表示の確認
トップ画面(root_path)に一覧ページへのリンクが表示されているか
root_pathが"/"であるか
一覧画面のテスト
一覧の表示とリンクの確認
bookの一覧表示(tableタグ)と投稿フォームが同一画面に表示されているか
bookのタイトルと感想を表示し、詳細・編集・削除のリ ンクが表示されているか
Create Bookボタンが表示される
投稿処理に関するテスト
投稿に成功しサクセスメッセージが表示されるか (FAILED - 1)
投稿に失敗する
投稿後のリダイレクト先は正しいか
book削除のテスト
application.html.erbにjavascript_pack_tagを含んでいるか
bookの削除
詳細画面のテスト
表示の確認
本のタイトルと感想が画面に表示されていること
Editリンクが表示される
Backリンクが表示される
リンクの遷移先の確認
Editの遷移先は編集画面か
Backの遷移先は一覧画面か
編集画面のテスト
表示の確認
編集前のタイトルと感想がフォームに表示(セット)され ている
Update Bookボタンが表示される
Showリンクが表示される
Backリンクが表示される
リンクの遷移先の確認
Showの遷移先は詳細画面か
Backの遷移先は一覧画面か
更新処理に関するテスト
更新に成功しサクセスメッセージが表示されるか
更新に失敗しエラーメッセージが表示されるか (FAILED - 2)
更新後のリダイレクト先は正しいか
Failures:
1) 投稿のテスト 一覧画面のテスト 投稿処理に関するテスト 投稿に成功しサクセスメッセージが表示されるか
Failure/Error: expect(page).to have_content 'successfully'
expected to find text "successfully" in "Book was successflly created.\nTitle:l6ukt\nBody:orvqqfdbkogvj2e2skan\nEdit|Back"
# ./spec/system/books_spec.rb:60:in `block (4 levels) in <main>'
2) 投稿のテスト 編集画面のテスト 更新処理に関するテスト 更新に失敗しエラーメッセージが表示されるか
Failure/Error: expect(page).to have_content 'error'
expected to find text "error" in "Book was successfully updated.\nTitle:hoge\nBody:body\nEdit|Back"
# ./spec/system/books_spec.rb:170:in `block (4 levels) in <main>'
該当するソースコード
bookers/app/controllers/books_controller.rb
class BooksController < ApplicationController
def index
@books=Book.all
@book=Book.new
end
def create
@book=Book.new(book_params)
if @book.save
flash[:notice]="Book was successflly created."
redirect_to book_path(@book.id)
else
@books=Book.all
render :index
end
end
def show
@book=Book.find(params[:id])
end
def edit
@book=Book.find(params[:id])
end
def destroy
book=Book.find(params[:id])
book.destroy
redirect_to books_path
flash[:notice] = "Book was successflly destroy."
end
def update
book=Book.find(params[:id])
book.update(book_params)
flash[:notice]="Book was successfully updated."
redirect_to book_path(book.id)
end
private
def book_params
params.require(:book).permit(:title, :body)
end
end
app/views/books/index.html.erb
<h1>Books</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Body</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @books.each do |book| %>
<tr>
<td><%=book.title %></td>
<td><%=book.body %></td>
<td><%= link_to "Show", book_path(book.id) %></td>
<td><%=link_to 'Edit',edit_book_path(book.id)%></td>
<td><%=link_to 'Destroy',book,method: :delete,date: {confirm:"Are you sure?"}%></td>
</tr>
<% end %>
</tbody>
</table>
<h2>New book</h2>
<% if @book.errors.any? %>
<%= @book.errors.count %>errors prohibited this book from being saved
<ul>
<% @book.errors.full_messages.each do |message| %>
<il><%= message %></il>
<% end %>
</ul>
<% end %>
<%=form_with model: @book, url:"/books" do |f| %>
<div class="text-field">
<div>Title</div>
<%= f.text_field :title %>
</div>
<div class="text-area">
<div>body</div>
<%= f.text_area :body %>
</div>
<div class="text-submit">
<%= f.submit 'Create Book' %>
</div>
<% end %>
app/views/books/show.html.erb
<p>Title:<%=@book.title %></p>
<p>Body:<%=@book.body %></p>
<%= link_to "Edit", edit_book_path(@book.id) %>|<a class ="back" href="/books">Back</a>
app/views/books/edit.html.erb
<%=f.text_field:title %>
<p>Body</p>
<%= f.text_area :body %>
<p><%= f.submit 'Update Book' %></p>
<% end %>
<%= link_to "Show", book_path(@book.id) %>|<a class ="back" href="/books">Back</a>
0