わからないこと
RSpecでspecを書いています。
テスト対象に、複数の条件でwhereして検索し、当てはまるもののみデータをフェッチするという処理があるので、FatcoryBotで値を指定したデータを含む複数のデータを生成し、その中から正しく目的のデータを取得できるか、というコードを書きたいのですが、その書き方がわかりません。
背景
以下のようなアソシエーションのmodelがあります。
rb
1class User < ApplicationRecord 2 has_one :house 3end
rb
1class House < ApplicationRecord 2 belongs_to :user 3end
それぞれ次のようなカラムがあり、今回はジョインして使います。
user.id user.name house.user_id(FK: user.id) house.name
例えば、以下のようなモックデータを用意して、テストで使いたいです。
id: 12345 username: 'テストタロウ' housename: 'タロウの家'
試したこと
spec中でbinding.pry
で抜けて、持っているオブジェクトの中身を見ると、id, username, housenameのカラムは存在しており、ファクトリの設定通り、中身にはランダムの値が入っています。
こちらで値を指定することができない状況です。
RSpecもFactoryBotも初心者なのですが、任意のデータを作成するには、
- specで指定する
- traitで定義する
という方法があると知り、試しましたが、以下のようにうまくいきませんでした。
(userとhouseのファクトリは作成済み)
- specで指定
rb
1let(:user_1){create(:user, id: 12345, username: 'テストタロウ', housename: 'タロウの家')}
console
1 NoMethodError: 2 undefined method `housename=' for #<User:0x0000560b7ab3c140>
(idとusernameだけでcreateすると、そのとおりのデータが生成されます。結合先のデータも指定しようとすると上記エラーが出ます)
- traitで定義する
rb
1trait :with_house_info do 2 after(:create) do |user| 3 user.id =12345 4 user.username = 'テストタロウ' 5 user.housename = 'タロウの家' 6 end 7end
これをcreateの引数で指定して使おうとしましたが、このようなデータは生成されませんでした。
housenameを抜いて実行しても、id = 12345のようなデータは生成されませんでした。
どのようにすれば、結合先のカラムも値を指定してダミーデータを生成することができるのでしょうか?
上記だけでは説明が足りない部分などありましたら、ご指示いただけますと幸いです。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/21 05:11