前提・実現したいこと
Railsでテストコードを書きたくてRSpecでModelのテストコードを書いています。content
のバリデーションのテストで期待通りの結果が返ってこないので質問します。
###バージョン
- Ruby 3.0.0
- Ruby on Rails 6.1.3.1
発生している問題・エラーメッセージ
Post contentバリデーション 1文字はOK (FAILED - 1) Failures: 1) Post contentバリデーション 1文字はOK Failure/Error: expect(@post.valid?).to eq(true) expected: true got: false (compared using ==) Diff: @@ -1 +1 @@ -true +false # ./spec/models/post_spec.rb:32:in `block (3 levels) in <top (required)>' Finished in 0.03743 seconds (files took 0.98994 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/models/post_spec.rb:31 # Post contentバリデーション 1文字はOK
該当のソースコード
post_spec.rb
require 'rails_helper' RSpec.describe Post, type: :model do before do @post = Post.new(user_id: 2, restaurant_id: 1, content: "aaaa") end describe 'contentバリデーション' do it "1文字はOK" do expect(@post.valid?).to eq(true) end end end
post.rb
class Post < ApplicationRecord belongs_to :user belongs_to :restaurant validates :content, presence: true, length: { maximum: 255 } end
試したこと
rails c
では問題なくtrueが返ってきました。テストコードだとうまくいかない理由がわからないです。
3.0.0 :001 > post = Post.new(user_id: 2, restaurant_id: 1, content: "aaaa") TRANSACTION (0.1ms) BEGIN => #<Post id: nil, user_id: 2, restaurant_id: 1, content: "aaaa", created_at: nil, updated_at: nil> 3.0.0 :002 > post.valid? User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1 Restaurant Load (0.2ms) SELECT `restaurants`.* FROM `restaurants` WHERE `restaurants`.`id` = 1 LIMIT 1 => true 3.0.0 :003 >
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/26 06:19