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

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

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

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

Q&A

1回答

228閲覧

【Rails】minitestで新規投稿ができない

ysk91

総合スコア0

Ruby on Rails 5

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

0グッド

0クリップ

投稿2022/09/10 08:13

【Rails】minitestで新規投稿ができない

前提

Railsで投稿アプリを開発しています。
ローカルサーバー上では投稿できるのですが、minitestではvalid?メソッドが通りません。

実現したいこと

テストコード

class InfoPostTest < ActionDispatch::IntegrationTest # fixturesで定義したユーザー def setup @michael = users(:michael) end # Green test "user valid?" do @michael.valid? end # Red test "@info valid?" do @info = @michael.infos.build( name: "Michael info name", url: "michael_info.com", address: "michael info address", point: "aaa", genre_id: 1, ) assert @info.valid? # ここがRed end

Infoモデル設計

infoはお店の情報を表します。
id, name, url, address, point, user_id, genre_id, created_at, updated_at
のカラムを持っています。
User, Genreモデルに紐付いています。

class Info < ApplicationRecord belongs_to :user belongs_to :genre validates :name, {presence: true} validates :address, {presence: true} validates :url, {presence: true} validates :genre_id, {presence: true} validates :point, {presence: true, length: {maximum: 140}} end

UserとGenreのモデル設計

Infoの紐付け元のモデルではhas_many :infosを指定しています。

Userモデル

class User < ApplicationRecord has_many :infos, dependent: :destroy end

Genreモデル

class Genre < ApplicationRecord has_many :infos, dependent: :destroy end

infos_controllerの設計

infos_controllerのcreateアクションは下記です。

def create @info = Info.new(info_params) if @info.save redirect_to info_path(@info) else render new_info_path end end private def info_params params.require(:info).permit(:name, :url, :address, :point, :genre_id ).merge(user_id: @current_user.id) end

発生している問題・エラーメッセージ

FAIL["test_@info_valid?", #<Minitest::Reporters::Suite:0x000000012a251c20 @name="InfoPostTest">, 0.5968529999954626] test_@info_valid?#InfoPostTest (0.60s) Expected false to be truthy.

試したこと

  • @infocreated_at: 2.hours.agoを追加 => 解決せず

  • @infouser_id: @michael.idを追加 => 解決せず

  • buildではなくnewに変更 => 解決せず

  • コンソールにて

$ user = User.first => 情報が表示される $ info = user.infos.build( $ name: "Michael info name", $ url: "michael_info.com", $ address: "michael info address", $ point: "aaa", $ genre_id: 1 $ ) => #<Info:0x000000013988a308 id: nil, name: "Michael info name", url: "michael_info.com", address: "michael info address", point: "aaa", user_id: 1, genre_id: 1, created_at: nil, updated_at: nil> $ info.valid? => true #ここでvalid?に対してtrueが返ってきているのにminitestだと通らないのが謎 $ info.user.name => "test" # 正しい値を返している

補足情報(FW/ツールのバージョンなど)

ruby -v => ruby 2.6.10p210 (2022-04-12 revision 67958) [arm64-darwin21] rails -v => Rails 5.2.8.1

初めての質問ですので不足している情報もあるかと思いますが、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

なぞですね。
こういうとき私はなぜだめなのか、を確認します
assert @info.valid?
ではなく
@info.valid?
して
@info.errors.messages
が 空の {} であることを確認します。
assert @info.valid?が失敗するということは、そこが 空ではないのでその内容を読んで原因を突き止めます

投稿2022/09/11 23:40

winterboum

総合スコア23347

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問