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

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

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

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

受付中

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

ysk91
ysk91

総合スコア0

Ruby on Rails 5

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

1回答

0リアクション

0クリップ

117閲覧

投稿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

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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