前提・実現したいこと
RSpecによるテストを行うとエラーになってしまいます。
自分の新しい投稿が正しく保存されるよにしたいです。
発生している問題・エラーメッセージ
1) [STEP2] ユーザログイン後のテスト 自分の投稿詳細画面のテスト 投稿成功のテスト 自分の新しい投稿が正し く保存される Failure/Error: expect { click_button 'Create Book' }.to change(user.books, :count).by(1) expected `Book::ActiveRecord_Associations_CollectionProxy#count` to have changed by 1, but was changed by 0
該当のソースコード
controller
1class BooksController < ApplicationController 2 before_action :authenticate_user! 3 4 def show 5 @book = Book.find(params[:id]) 6 @book_new = Book.new 7 @user = @book.user 8 end 9 10 def index 11 @books = Book.all 12 @user = User.find(current_user.id) 13 @book = Book.new 14 end 15 16 def create 17 @book = Book.new(book_params) 18 @book.user_id = current_user.id 19 if @book.save 20 redirect_to book_path(@book) 21 flash[:notice]= "You have created book successfully." 22 else 23 @books = Book.all 24 @user = User.find(current_user.id) 25 render 'index' 26 end 27 end 28 29 def edit 30 @book = Book.find(params[:id]) 31 if @book.user == current_user #URLを入力しても画面に飛ばせない 32 render "edit" 33 else 34 redirect_to books_path 35 end 36 end 37 38 def update 39 @book = Book.find(params[:id]) 40 if @book.update(book_params) 41 redirect_to book_path(@book), notice: "You have updated book successfully." 42 else 43 render "edit" 44 end 45 end 46 47 def destroy 48 @book = Book.find(params[:id]) 49 @book.destroy 50 redirect_to books_path 51 end 52 53 private 54 55 def book_params 56 params.require(:book).permit(:title, :body) 57 end 58 59end
routesrb
1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'homes#top' 4 resources :books,only:[:new,:create,:index,:show,:destroy,:edit,:update] 5 resources :users,only:[:show,:new,:index,:edit,:create,:update] 6 get 'home/about' => 'homes#index' 7 8end 9
補足情報(FW/ツールのバージョンなど)
Rails5.2.6
ここにより詳細な情報を記載してください。
テストコードがないので判断できないですが、問題の切り分け方として一時的に下記のようにデバッグ出力するとわかりやすいですよ
"in create" が出力されるとアクションまでは到達している。
"success" が出力されると保存が成功している。
"fail" が出力される場合は validationエラーなどのエラーが出ている。
```
def create
p "in create"
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
p "success"
redirect_to book_path(@book)
flash[:notice]= "You have created book successfully."
else
p "fail"
p @book.errors
@books = Book.all
@user = User.find(current_user.id)
render 'index'
end
end
```
返信遅くなり申し訳ありません。
試してみます!
回答1件
あなたの回答
tips
プレビュー