ヨージとプログラミング

プログラミング勉強の記録

【Rails】RSpecでインスタンス変数を変更した後はreloadしよう

createした後にインスタンス変数を設定したい場合の話

RSpecでテストを行う前にletでインスタンスを生成することが多いと思います。

# 例 productクラスのインスタンスを生成しproduct_1に代入
let(:product_1) { create(:product, name: 'macbook') }

上の例では生成したインスタンスが値が'macbook'のname変数を持ちます。生成と同時に定義されています。
では、次のような場合どうなるでしょう?

# name変数なしで生成
let(:product_1) { create(:product) }
# 後でnameを定義
product_1.name = 'macbook'

1つ目の例と一緒のようですが、これではnameは未定義のままでした。(コンソールでたたけ無いので実行結果を載せれませんすみません)

reloadしないと適応されないぞ♪

# name変数なしで生成
let(:product_1) { create(:product) }
product1.name = 'macbook'

product_1.reload

reloadをしてあげることでしっかりと反映されrspecもすべてクリアできました。