Active Record - 関連付けモデルのテスト方法

Modelの設定

UserモデルとFundモデルがあり、Userモデルは複数のFundモデルを持つ関連付けの設定は以下のようになります。
オプションとして、Userモデルが削除されたときに関連するFundモデルも削除することとします。

app/models/user.rb
class User < ApplicationRecord
  ...
  has_many :funds, dependent: :destroy
end
app/models/fund.rb
class Fund < ApplicationRecord
  ...
  belongs_to :user
end

Factoryの設定

FactoryにはFactoryBotを使っています。
UserモデルのFactoryは普通に記述します(関連付けによる特記はありません)。

spec/factories/funds.rb
FactoryBot.define do
  factory :fund do
    ...
    association :user
  end
end

テスト方法

Userモデルが削除されたとき、関連するFundモデルも削除されることをテストします。
フィーチャーテスト(システムテスト)でも同じようなテストをする気がしますが、モデルのテストではより簡単に以下のようにテストしました。

spec/models/user_spec.rb
RSpec.describe User, type: :model do
  ...
  describe 'association' do
    it 'delete funds when deleted a user associated it' do
      user = FactoryBot.build(:user)
      user.funds << FactoryBot.build(:fund)
      user.save
      expect{ user.destroy }.to change{ Fund.count }.by(-1)
    end
  end
end
FundモデルはFactoryが生成できることのテストのみを行いました。

spec/models/fund_spec.rb
RSpec.describe Fund, type: :model do
  it 'has a valid factory' do
    expect(FactoryBot.build(:fund)).to be_valid
  end
end
Userモデルが関連付いているかをテストする以下のようなテストをしてもいいかもしれません。
RSpec.describe Fund, type: :model do
  ...
  it 'is associated user when created fund' do
    expect(FactoryBot.build(:fund).user_id).to eq 1
  end
end

関連記事

【Rails】RSpecを使った自動テスト《ベストプラクティスとTips編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 23:33
【Rails】RSpecを使った自動テスト《CI/CDパイプラインへの統合編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 23:20
【Rails】RSpecを使った自動テスト《テストのパフォーマンス改善編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 23:12
【Rails】RSpecを使った自動テスト《テストの共通化編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 23:05
【Rails】RSpecを使った自動テスト《モック/スタブ編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 18:25
【Rails】RSpecを使った自動テスト《ファクトリー編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 17:55
【Rails】RSpecを使った自動テスト《システムスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 17:07
【Rails】RSpecを使った自動テスト《リクエストスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 16:06