質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1750閲覧

Rails でRSpecによるテストを行うとエラーになってしまいます

uruman

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/10/22 19:12

前提・実現したいこと

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

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshih

2021/10/25 01:46

テストコードがないので判断できないですが、問題の切り分け方として一時的に下記のようにデバッグ出力するとわかりやすいですよ "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 ```
uruman

2021/10/26 01:17

返信遅くなり申し訳ありません。 試してみます!
guest

回答1

0

自己解決

時間を置いたところ解決しました。

投稿2021/10/26 01:18

uruman

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問