【Rails】名前空間のあるモデルのspec

はじめに

前回名前空間のあるモデルを作成しました。

【Rails】テーブル名にプレフィックスを付与・ネームスペース付きのモデルを作成 - まっきーの学習記録

どうやってスペックを書くのか調べたので、まとめます。

方法

本記事でproject名前空間の名前です。

それぞれのアプリで置き換えてください。

(1つのアプリに複数プロジェクトを共存させるという目的があったため、projectとしています。)

Factoryの作成

spec/factories/users.rbを作るようなところ、spec/factories/project/users.rbを作成。

classに名前空間付きのクラス名を渡す。

そのほかは通常の書き方でOK。

FactoryBot.define do
  factory :project_user, class: 'Project::User' do
    ...
  end
end

System Spec 等で呼び出し

spec側での呼び出しはfactory名をそのまま呼び出すだけなので、通常通りでOK。

let(:user) { FactoryBot.create(:project_user, email: 'test@example.com') }

終わりに

Factoryを作成する時にclass名を指定してあげるだけで良いので想像以上に簡単でした。

ちなみにディレクトリ構造のイメージは以下のような感じです。 ご参考までに。

spec
  └factories
    └projectA
      └users.rb
      └admins.rb
    └projectB
      └users.rb
      └admins.rb
  └system
    └projectA
    └projectB
  └...(他のspec等)