0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアル 第14章 ユーザーをフォローする - Relationshipモデル - Relationshipのバリデーション

Posted at

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_idfollowed_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

無事テストが成功しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?