【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もすべてクリアできました。