Rails 5 から assigns(assert_templateも)が非推奨になりました。
一応、コントローラーテスト自身はdeprecatedになっていないのでassignsは使えるのですが、rails-controller-testingというgemをインストールする必要があります。
しかし、これはあくまでも既存のプロジェクトに対する救済策で、新規のプロジェクトでassignsを使うことは推奨できません。(ぶっちゃけ理由はわからないです。わかる方いれば教えて下さい )
↑ @jnchito さんからコメント頂きました。ありがとうございます!
簡単に言うと、Railsの生みの親が、「やめよう」といったからです。(鶴の一声??)
詳しく知りたい方はコメント欄をご覧ください
代わりに、
controller.instance_variable_get("@hoge")
というのを使うことでインスタンス変数を取得することができます。
#コード例
最近書いたパスワードリセット処理のテストを一部抜粋してきました。
RSpec.describe 'PasswordResets', type: :request do
let(:user) { create(:user) }
describe 'パスワードリセット編集画面へのアクセス' do
context '不正なメールアドレスだったとき' do
it 'userはパスワード再設定ページへリダイレクトされること' do
post password_resets_path, params: { password_reset: { email: user.email } }
user = controller.instance_variable_get('@user')
get edit_password_reset_path(user.reset_token, email: '')
expect(flash[:danger]).to be_truthy
follow_redirect!
expect(request.fullpath).to eq '/password_resets/new'
end
end
↑のコードではreset_token属性にアクセスしたかったので、そのためにcreateアクションの@userというインスタンス変数を取得しているといった感じです。
また、こちらはもっといい書き方がある(システムスペック)ことを、 @jnchito さんから教えていただいたので、後日こちらに追記していきたいと思ってます!
#最後まで読んでいただきありがとうございます!
最近個人開発のアプリのデプロイに必死で、少し短いです
デプロイ完了したら、また記事をがっつり書いてこうと思ってます!!よろしくお願いいたします。