Relationshipに対するバリデーションのテスト
Relationshipモデルを生成した時点で、Relationshipモデルに対するテストであるtest/models/relationship_test.rb
も生成されました。test/models/relationship_test.rb
の内容は、以下のような内容とします。
test/models/relationship_test.rb
require 'test_helper'
class RelationshipTest < ActiveSupport::TestCase
def setup
@relationship = Relationship.new( follower_id: users(:rhakurei).id,
followed_id: users(:mkirisame).id)
end
test "should be valid" do
assert @relationship.valid?
end
test "should require a follower_id" do
@relationship.follower_id = nil
assert_not @relationship.valid?
end
test "should require a followed id" do
@relationship.followed_id = nil
assert_not @relationship.valid?
end
end
Relationshipモデルに対するバリデーションの追加
Relationshipモデルに対し、「有効なレコードのfollower_id
とfollowed_id
は、nil
や空文字列(""
)であってはならない」というバリデーションを追加します。
app/models/relationship.rb
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
+ validates :follower_id, presence: true
+ validates :followed_id, presence: true
end
Relationship用のfixtureの内容
Relationshipモデルとともに生成されたfixtureの内容では、マイグレーションで定義した一意性制約を満たすことができず、テストがうまくいきません。そのため、当該fixtureの内容は、さしあたって空にする必要があります。
test/fixtures/relationships.yml
# 空にする
この時点における、Relationshipモデルに対するテストの結果
- UserモデルおよびRelationshipモデルの内容の定義
- Relationshipモデルに対するテストの内容の定義
- Relationshipモデルに対するバリデーションの追加
- Relationshipモデルのテストに対するfixtureの内容削除
以上が終わった時点でtest/models/relationship_test.rb
に対するテストを実行すると、テストは成功するはずです。
# rails test test/models/relationship_test.rb
Running via Spring preloader in process 114
Started with run options --seed 16416
3/3: [===================================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.08988s
3 tests, 3 assertions, 0 failures, 0 errors, 0 skips
無事テストが成功しました。