Présentation de Rspec, un framework de test pour Ruby on Rails

Qu'est-ce qu'un test?

Il est difficile de vérifier manuellement tous les différents comportements d'une application. Par conséquent, en écrivant un test, il est possible de vérifier efficacement si les données sont correctement transmises et si elles se comportent comme prévu.

À propos du framework de test et de Rspec dans Ruby

Le framework de test Ruby le plus connu

Type de test

Il existe plusieurs types de tests utilisés dans le didacticiel Rails.

Il existe un test unitaire qui vérifie le fonctionnement d'un seul modèle ou assistant de vue, un test de fonction qui vérifie le résultat de l'appel d'un contrôleur / d'une vue et un test intégré qui vérifie le comportement d'une application qui s'étend sur plusieurs contrôleurs, en supposant les opérations réelles de l'utilisateur. En développement, les tests ci-dessus sont souvent effectués.

introduction

Mettez la gemme pour rspec dans le Gemfile


group :development, :test do
  gem 'rspec-rails'
end

après,

$ bundle install

Laisser.

Si nécessaire, incluez FactoryBot (anciennement FactoryGirl). Références: https://qiita.com/at-946/items/aaff42e4a9c2e4dd58ed

grammaire

Description des exigences de test

describe , it , expect Vous pouvez les utiliser pour décrire vos exigences de test.

Par exemple, dans un test unitaire (test de modèle)

spec/company_spec.rb



RSpec.describe Account, type: :model do
  describe 'company model' do
    it 'Créer' do
      expect { create(:company) }.to change { Company.count }.by(1)
    end
  end
end

Lorsqu'une erreur se produit dans Rspec, le texte décrit dans le contexte et il est généré. Cela vous donnera une idée de l'endroit où l'erreur s'est produite.

context Vous pouvez également utiliser le contexte pour créer une branche de la condition. Vous pouvez créer chacun d'eux Par exemple, dans le test du contrôleur

spec/company_spec.rb


RSpec.describe CompaniesController, type: :controller do
  describe 'Obtenir la liste' do
    context 'Si vous êtes connecté' do
      it 'Renvoie 200' do
        //Processus de test
      end
    end
    context 'Si vous n'êtes pas connecté' do
      it 'Renvoie une erreur 400' do
        //Processus de test
      end
    end
  end
end

Utiliser correctement

Classification Décrire
describe Sujet au test
context Décrire la classification des cas de conditions spécifiques
it Décrivez ce qu'est le résultat

Après avoir décrit le comportement comme ci-dessus, nous écrirons le test.

let , let!

Lorsque vous utilisez des données de test dans le test, décrivez ce traitement. Par exemple

spec/company_spec.rb


RSpec.describe CompaniesController, type: :controller do
  describe 'Obtenir la liste' do
    context 'Si vous êtes connecté' do
      it 'Renvoie 200' do
        let(:company) { Company.create(name: 'Yamada Co., Ltd.', email: '[email protected]') }
        #Processus de test
      end
    end
    context 'Si vous n'êtes pas connecté' do
      it 'Renvoie une erreur 400' do
        #Processus de test
      end
    end
  end
end

Créez des données dans la partie où vous écrivez le processus comme décrit ci-dessus.

laissez laisser! est chacun

Classification Calendrier d'évaluation
let Traité lors du premier appel de la méthode
let! Traité avant l'exécution du bloc

En d'autres termes, dans l'exemple ci-dessus

let(:company) { Company.new(name: 'Yamada Co., Ltd.', email: '[email protected]') }

À ce stade,: la société n'a pas été créée Par exemple

process :show, method: :get, params: { company_id: company.id }

La différence est qu'il est créé lorsque la société est appelée, comme dans.

Une erreur peut se produire en raison de la différence dans le moment de l'appel, donc cette différence est quelque chose dont je veux être conscient.

before / after Si vous souhaitez effectuer un processus avant et après le test, décrivez-le ici.

Les données créées par Rspec sont essentiellement supprimées de la base de données de test après le test.

À la fin

Je vais résumer ce que je dérange personnellement avec Rspec. Je vous serais reconnaissant si vous pouviez signaler des erreurs!

Les références

https://qiita.com/jnchito/items/42193d066bd61c740612#context-%E3%81%A7%E6%9D%A1%E4%BB%B6%E5%88%A5%E3%81%AB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E3%81%99%E3%82%8B https://qiita.com/uchiko/items/d34c5d1298934252f58f

Recommended Posts

Présentation de Rspec, un framework de test pour Ruby on Rails
[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
Comprendre la couverture du code avec Rspec, le framework de test Ruby on Rails
Présentation de Rspec avec Ruby on Rails x Docker
[Ruby on Rails] Jusqu'à l'introduction de RSpec
Ruby on Rails élémentaire
[Ruby on Rails] Un mémorandum de modèles de mise en page
Principes de base de Ruby on Rails
[Rails] Test avec RSpec
(Ruby on Rails6) Création de données dans une table
Association Ruby On Rails
J'ai fait un portfolio avec Ruby On Rails
[Ruby On Rails] Erreur de test utilisant le client RSpec MySQL n'est pas connecté
[Introduction] Créer une application Ruby on Rails
Créer un environnement de développement Ruby on Rails sur AWS Cloud9
Exécutez des tests Ruby on Rails RSpec avec des actions GitHub
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
Record d'apprentissage de Ruby on rails -2020.10.09
Record d'apprentissage Ruby on rails-2020.10.07 ②
[Rails] Code de test à l'aide de Rspec
Publier des vidéos sur les rails
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
Mémorandum de base Ruby on Rails
[Ruby on Rails] J'obtiens un avertissement lors de l'exécution de RSpec car gem'chromedriver-helper 'est obsolète.
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
Une note sur la fonction de départ de Ruby on Rails
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Explication de Ruby on rails pour les débutants ③ ~ Création d'une base de données ~
Appliquer le CSS à une vue spécifique dans Ruby on Rails
[Ruby on Rails] J'obtiens un avertissement lors de l'exécution de RSpec en raison d'une version différente de gem.
L'histoire de l'introduction d'un framework sans serveur très semblable à Rails "Ruby on Jets" dans l'environnement de production
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
Comment utiliser Ruby on Rails
Ruby on Rails compatible japonais-anglais i18n
(Ruby on Rails6) "Effacer" le contenu publié
[Ruby on Rails] Fonction de sortie CSV
Mémo de construction de l'environnement Ruby on Rails 6.0
[Rails5] Rspec -Test d'unité lors de l'imbrication-
[Ruby on Rails] Création de la page de confirmation
Ruby On Rails conçoit un conflit de routage