[Ruby on Rails] Afficher le test avec RSpec

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

Nous partirons du principe que cela est fait. [Ruby on Rails] Jusqu'à l'introduction de RSpec

Cliquez ici pour tester le modèle [Ruby on Rails] Test du modèle avec RSpec

Cliquez ici pour tester le contrôleur [Ruby on Rails] Test du contrôleur avec RSpec

voir la préparation au test

・ Création d'un fichier

① Créez un dossier système et un dossier usines selon les spécifications. Dans le dossier système, créez également le fichier de vue que vous souhaitez tester, Créez un modèle de données factices dans le dossier usines.

Cette fois pour tester la vue du message La structure des fichiers est la suivante.

spec/system/post_spec.rb
→ Décrivez le contenu que vous souhaitez tester.

spec/factories/post.rb
spec/factories/user.rb
→ Créez des données factices.

② Vous permet d'utiliser FactoryBot. Il est pratique de l'utiliser car vous pouvez enregistrer la base de données et créer le modèle comme user = create (: user). Créez un dossier de support et un fichier factory_bot.rb sous spec et décrivez comme suit.

spec/support/factory_bot.rb


RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

Ajoutez ensuite ce qui suit:

spec/rails_helper.rb


# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'support/factory_bot' #<-Ajout

...

Modification de spec_helper.rb

RSpec le contenu suivant.configure do |config|Ajouter à.

spec/spec_helper.rb


RSpec.configure do |config|
  config.before(:each, type: :system) do
    driven_by :rack_test
  end

...

end

Code réel

Tout d'abord, créez des données factices.

spec/factories/user.rb


FactoryBot.define do
  factory :user do
    email { Faker::Internet.email }
    phone_number { 12345678909 }
    password { 'password' }
    password_confirmation { 'password' }
  end
end

spec/factories/post.rb


FactoryBot.define do
  factory :post do
    body { Faker::Lorem.characters(number:20) }
    user
  end
end

Ensuite, écrivez le code de test.

spec/system/post_spec.rb


require 'rails_helper'

describe 'Post test' do
  let(:user) { create(:user) }
  let(:user2) { create(:user) }
  let(:post) { create(:post, user: user) }
  let(:post2) { create(:post, user: user2) }
  before do
    visit new_user_session_path
    fill_in 'user[email]', with: user.email
    fill_in 'user[password]', with: user.password
    click_button 'S'identifier'
    visit user_posts_path(user, post)
  end
  describe 'Test d'affichage' do
    context 'Nouvel écran de publication' do
      before do
        visit new_user_post_path(user, post)
      end
      it 'la forme du corps est affichée' do
        expect(page).to have_field 'post[body]'
      end
      it 'Le bouton Nouveau message s'affiche' do
        expect(page).to have_button 'Nouveau poste'
      end
    end
  end
  describe 'Test d'édition' do
    context 'Transition vers l'écran d'édition de votre message' do
      it 'Peut faire la transition' do
        visit edit_user_post_path(user, post)
        expect(current_path).to eq('/users/' + user.id.to_s + '/posts/' + post.id.to_s + '/edit')
      end
    end
    context 'Transition vers l'écran d'édition du message d'une autre personne' do
      it 'Impossible de faire la transition' do
        visit edit_user_post_path(user, post2)
        expect(current_path).to eq('/users/' + user.id.to_s + '/posts')
      end
    end
  end
end

Ensuite, procédez comme suit dans votre terminal:

Terminal


$ rspec spec/requests

Si vous obtenez une erreur, veuillez également essayer ceci

Terminal


$ bundle exec rspec spec/system --format documentation

Si vous réussissez le test

Finished in 3.64 seconds (files took 2.75 seconds to load)
4 examples, 0 failures

Comme il est affiché comme ceci, cela signifie que le contenu du test est correct.

Référence (extrait du test du modèle)

[Ruby on Rails] Test du modèle avec RSpec Au contraire, s'il ne réussit pas le test, vous pouvez voir où l'erreur se produit de cette manière, donc Vous pourrez voir si le code de test est erroné, la validation est fausse, et ainsi de suite.

Failures:

  1)Post-test du modèle Colonne du titre du test de validation Doit contenir 20 caractères maximum
     Failure/Error: let!(:post) { build(:post) }

     NoMethodError:
       undefined method `build' for #<RSpec::ExampleGroups::Post::Nested::Title:0x000000000619e938>
     # ./spec/models/post_spec.rb:9:in `block (3 levels) in <top (required)>'

  2)Post-test du modèle Colonne du titre du test de validation Ne doit pas être vide
     Failure/Error: let!(:post) { build(:post) }

     NoMethodError:
       undefined method `build' for #<RSpec::ExampleGroups::Post::Nested::Title:0x0000000007491518>
     # ./spec/models/post_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.07992 seconds (files took 2.41 seconds to load)
2 examples, 2 failures

Failed examples:

rspec ./spec/models/post_spec.rb:11 #Post-test du modèle Colonne du titre du test de validation Doit contenir 20 caractères maximum
rspec ./spec/models/post_spec.rb:15 #Post-test du modèle Colonne du titre du test de validation Ne doit pas être vide

De plus, en utilisant rspec ./spec/models/post_spec.rb:11 en bas, Vous pouvez également vérifier le contenu du test individuellement comme indiqué ci-dessous.

Terminal


$ rspec spec/models/post_spec.rb:11

Résumé

Cette fois Tout d'abord, créez des données factices, Après vous être connecté sur l'écran de connexion

  1. Accédez à l'écran de publication lorsque vous êtes connecté et voyez si l'affichage est correct. 2, est-il possible de passer à l'écran d'affichage d'une autre personne? J'ai testé ces deux points.

Parce qu'il existe également un moyen de tester javascript Si vous êtes intéressé, veuillez le vérifier.

De plus, sur Twitter, les technologies et les idées qui n'ont pas été téléchargées sur Qiita sont également téléchargées, donc Je vous serais reconnaissant si vous pouviez me suivre. Cliquez ici pour plus de détails https://twitter.com/japwork

Recommended Posts

[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Test du contrôleur avec RSpec
[Ruby on Rails] Test de modèle avec RSpec
[Rails] Test avec RSpec
Présentation de Rspec avec Ruby on Rails x Docker
Comprendre la couverture du code avec Rspec, le framework de test Ruby on Rails
Présentation de Rspec, un framework de test pour Ruby on Rails
Exécutez des tests Ruby on Rails RSpec avec des actions GitHub
[rails] Faisons un test unitaire avec Rspec!
Remarques sur l'utilisation de FCM avec Ruby on Rails
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Testez Nokogiri avec Rspec.
Association Ruby On Rails
Publiez l'application avec ruby on rails
[Rails] Procédure de liaison de bases de données avec Ruby On Rails
Déterminez la page actuelle avec Ruby on Rails
[Ruby on Rails] Téléversement de plusieurs images avec refile
J'ai fait un portfolio avec Ruby On Rails
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Supprimer les images s3 avec Active Strage
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage de Ruby on rails -2020.10.09
Tester Active Strage avec RSpec
Record d'apprentissage Ruby on rails-2020.10.07 ②
[Rails] Code de test à l'aide de Rspec
[Ruby On Rails] Erreur de test utilisant le client RSpec MySQL n'est pas connecté
Tester le résolveur GraphQL avec rspec
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
[Rails] À propos du test de réponse Rspec
Record d'apprentissage de Ruby on rails -2020.10.06
Résumé de la validation Ruby on Rails
Création d'un plan de site au format RSS / Atom avec Ruby on Rails
Mémorandum de base Ruby on Rails
J'ai essayé d'installer le plugin lié à Ruby on Rails avec vim-plug
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
[Ruby on Rails] Implémenter la fonction de connexion par add_token_to_users avec l'API
Appliquer le CSS à une vue spécifique dans Ruby on Rails
[Ruby on Rails] Read try (: [] ,: key)
Variables Ruby on Rails, résumé constant
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
[Ruby on Rails] Introduction de la fonction de pagination
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
Comment utiliser Ruby on Rails