Depuis Rails 5, assigns (également assert_template) est obsolète. Pour le moment, le test du contrôleur lui-même n'est pas obsolète, donc les assigns peuvent être utilisés, mais vous devez installer un gem appelé rails-controller-testing.
Cependant, il ne s'agit que d'un remède pour les projets existants et il n'est pas recommandé d'utiliser des attributions dans de nouveaux projets. (Je ne sais pas pourquoi c'est si fou. S'il vous plaît laissez-moi savoir si vous savez: priez :)
au lieu de,
controller.instance_variable_get("@hoge")
Vous pouvez obtenir la variable d'instance en utilisant.
J'ai extrait une partie du test du processus de réinitialisation du mot de passe que j'ai écrit récemment.
password_resets_request_spec.rb
RSpec.describe 'PasswordResets', type: :request do
let(:user) { create(:user) }
describe 'Accès à l'écran d'édition de réinitialisation du mot de passe' do
context 'Lorsque l'adresse e-mail est incorrecte' do
it 'l'utilisateur doit être redirigé vers la page de réinitialisation du mot de passe' 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
Dans le code ci-dessus, je voulais accéder à l'attribut reset_token, donc j'ai l'impression d'obtenir une variable d'instance appelée @user pour l'action de création.
Désespéré de déployer des applications développées personnellement ces derniers temps, c'est un peu court: priez: Une fois le déploiement terminé, j'écrirai à nouveau un article solide! !! Je vous remercie.