ruby on rails Rspecで表示されたエラー内容について
解決したいこと
「rails」Rspec で表示されたエラーが出てきてしまいました。
6割くらいは自力でできたのですが残りが色々と調べて試してもうまくいかず、行き詰まってしまいました。
どなたか助言をいただけると助かります!よろしくお願いします!
発生している問題・エラー
1) 投稿のテスト 一覧画面のテスト 一覧の表示とリンクの確認 bookのタイトルと感想を表示し、詳細・編集・削除のリンクが表示されているか
Failure/Error: expect(show_link[:href]).to eq book_path(book)
expected: "/books.1"
got: "/books/1"
(compared using ==)
# ./spec/system/books_spec.rb:40:in `block (5 levels) in <main>'
# ./spec/system/books_spec.rb:33:in `each_with_index'
# ./spec/system/books_spec.rb:33:in `block (4 levels) in <main>'
2) 投稿のテスト 一覧画面のテスト 投稿処理に関するテスト 投稿後のリダイレクト先は正しいか
Failure/Error: expect(page).to have_current_path book_path(Book.last)
expected "/books/2" to equal "/books.2"
# ./spec/system/books_spec.rb:71:in `block (4 levels) in <main>'
3) 投稿のテスト 詳細画面のテスト 表示の確認 Editリンクが表示される
Failure/Error: expect(edit_link.native.inner_text).to match(/edit/i)
expected "Show" to match /edit/i
Diff:
@@ -1 +1 @@
-/edit/i
+"Show"
# ./spec/system/books_spec.rb:106:in `block (4 levels) in <main>'
4) 投稿のテスト 詳細画面のテスト 表示の確認 Backリンクが表示される
Failure/Error: expect(back_link.native.inner_text).to match(/back/i)
expected "Edit" to match /back/i
Diff:
@@ -1 +1 @@
-/back/i
+"Edit"
# ./spec/system/books_spec.rb:110:in `block (4 levels) in <main>'
5) 投稿のテスト 詳細画面のテスト リンクの遷移先の確認 Editの遷移先は編集画面か
Failure/Error: expect(current_path).to eq('/books/' + book.id.to_s + '/edit')
expected: "/books/1/edit"
got: "/books/1"
(compared using ==)
# ./spec/system/books_spec.rb:117:in `block (4 levels) in <main>'
該当するソースコード
Rails.application.routes.draw do
root 'homes#top'
get 'books' => 'books#index',as: 'book'
post 'books' => 'books#create'
delete 'books/:id' => 'books#destroy',as: 'destroy_book'
get 'books/:id' => 'books#show',as: 'show_book'
get 'books/:id/edit' => 'books#edit',as: 'edit_book'
patch 'books/:id' => 'books#update' ,as: 'update_book'
end
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 successfully created."
redirect_to show_book_path(@book)
else
@books = Book.all
render 'index'
end
end
def destroy
@book = Book.find(params[:id])
@book.destroy
flash[:notice] = "Book was successfully destroyed."
redirect_to book_path
end
def show
@book = Book.find_by(id: params[:id])
end
def edit
@book = Book.find(params[:id])
end
def update
@book = Book.find(params[:id])
if @book.update(book_params)
flash[:notice] = "Book was successfully updated."
redirect_to show_book_path(@book)
else
render 'edit'
end
end
private
def book_params
params.require(:book).permit(:title ,:body)
end
end
<body>
<div class="show-flash">
<%= flash[:notice] %>
</div>
<div class="index-header">Books</div>
<table class="index">
<tr>
<th class="index-title-text1">Title</th>
<th class="index-title-text2">Body</th>
</tr>
<% @books.each do |book| %>
<tr class="index-link" >
<td class="index-title"><%= book.title %></td>
<td class="index-title"><%= book.body %></td>
<td class="index-title"><%= link_to("Show",show_book_path(book)) %></td>
<td class="index-title"><%= link_to("Edit",edit_book_path(book)) %></td>
<td class="index-title"><%= link_to("Destroy", destroy_book_path(book.id),method: :delete,"data-confirm" =>"are you sure?",class: "delete-button") %></td>
</tr>
<% end %>
</table>
<% if @book.errors.any? %>
<div class="errors">
<h2 class="index-errors"><%= @book.errors.count %>errors prohibited this book from being saved:</h2>
<ul class="errors-text">
<% @book.errors.full_messages.each do |message| %>
<li class="index-errors-massage"><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="new-books">
<h2 class="new-books-title">New book</h2>
<%= form_with model: @book, url: books_path , local: true do |f| %>
<p class="new-books-text">Title</p>
<%= f.text_field :title ,class:"text-field"%>
<div class="new-body">
<p class="new-books-text">Body</p>
<%= f.text_area :body ,class:"text-area"%>
</div>
<%= f.submit 'Create Book', class: "buttom"%>
<% end %>
</div>
</body>
<body>
<div class="show-flash">
<%= flash[:notice] %>
</div>
<div class="show">
<div class="show-text"><p>Title:</p><%= @book.title %></div>
<div class="show-text"><p>Body:</p><%= @book.body %></div>
</div>
<div class="show-link">
<%= link_to"Edit", edit_book_path(@book) %>
<span>|</span>
<%= link_to"Back",book_path %>
</div>
</body>
<body>
<h1 class="edit-header">Editing Book</h1>
<% if @book.errors.any? %>
<%= @book.errors.count %>errors prohibited this book from being saved:
<ul>
<% @book.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
<div class="edit">
<%= form_with model: @book ,url: edit_book_path(@book) , url: update_book_path(@book.id), method: :patch do |f| %>
<div class="edit-text"><p>Title</p><%= f.text_field :title ,class:"text-field"%></div>
<div class="edit-text"><P>Body</P><%= f.text_area :body ,class:"text-area"%></div>
<div class=""><%= f.submit 'Update Book' , class: "buttom"%></div>
<% end %>
</div>
<div class="show-link">
<%= link_to("Show",show_book_path(@book)) %><span>|</span><%= link_to("Back",book_path) %>
</div>
</body>
自分で試したこと
controllerとroutesに問題があると思い、色々いじって試したのですがうまくいかず完全に行き詰まってしまいました。
0