[RUBY] Principes de base de Rspec [Rails]

Un mémorandum de grammaire de base de RSpec

introduction

La fonction de la phrase d'exemple de test est écrite grossièrement de manière à être facile à retenir, nous ne garantissons donc pas qu'elle convient à la programmation.

Les références Ruby on Rails5 guide pratique d'apprentissage rapide qui peut être utilisé sur le terrain

Introduction à RSpec utilisable, partie 1 https://qiita.com/jnchito/items/42193d066bd61c740612

Préparez-vous à l'avance

Créez un échafaudage de manière appropriée avec le générateur de rails

python


rails new plactice

python


rails db:create

python


rails g scaffold user name:string age:integer

python


rails db:migrate

python


rails s

Ceci termine la création du modèle. Créez user.rb dans le répertoire Model comme indiqué ci-dessous

model/user.rb


class User < ApplicationRecord
    def initialize(name:, age:)
        @name = name
        @age = age
    end

    def alcol
        if @age < 20
            "Depuis que j'ai 20 ans"
        else
            "Saké modérément!"
        end
    end
end

Complet avec les gemmes et paramètres liés à RSpec.

Organiser et classer les cas de test

describe Déclarez le regroupement de tests et décrivez les spécifications que vous essayez de tester.

décrire peut être imbriqué Sur le côté extérieur, décrivez le thème du fichier entier, et plus le nid est profond, plus le thème est fin.

python


RSpec.describe 'User' do
    describe '#alcol_age' do

    end

end

Ajoutez RSpec. À la description la plus externe.

context

La fonction est la même que describe (alias), mais la signification utilisée est différente. Il est utilisé lorsque vous souhaitez diviser les conditions de contenu de test pour chaque variation.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Si l'utilisateur a moins de 20 ans'do
            
        end

        context 'Si l'utilisateur a plus de 20 ans'do
            
        end
    end
end

it Décrivez le comportement attendu de la fonction sous forme de phrase. Écrivez une déclaration de test ici Et il est résumé dans une unité appelée exemple.

Si tous les chemins qu'il contient sont passés, cela signifie que l'exemple (test) est passé.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Si l'utilisateur a moins de 20 ans'do
            it 'Attention Les commentaires sont affichés pour les moins de 20 ans' do
                user = User.new(name: 'A', age: 18)
                expect(user.alcol_age).to have_content 'Depuis que j'ai 20 ans'
            end
        end

        context 'Si l'utilisateur a plus de 20 ans'do
            it 'Remarque Le commentaire doit être affiché pour les personnes de plus de 20 ans.' do
                user = User.new(name: 'A', age: 20)
                expect(user.alcol_age).to have_content 'Saké modérément!'
            end
        end
    end
end

before Si before est décrit dans describe ou context, le code écrit dans le bloc before est exécuté avant que le code de test dans cette zone ne soit exécuté. J'avais l'habitude de créer un utilisateur avec, mais l'écrire avant est plus facile à lire et peut être utilisé dans plusieurs conditions, de sorte que l'effet de le rendre DRY peut également être obtenu.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Si l'utilisateur a moins de 20 ans'do
            it 'Attention Les commentaires sont affichés pour les moins de 20 ans' do
                user = User.new(name: 'A', age: 18)
                expect(user.alcol_age).to have_content 'Depuis que j'ai 20 ans'
            end
        end

        context 'Si l'utilisateur a plus de 20 ans'do
            it 'Remarque Le commentaire doit être affiché pour les personnes de plus de 20 ans.' do
                user = User.new(name: 'B', age: 20)
                expect(user.alcol_age).to have_content 'Saké modérément!'
            end
        end
    end
end

before est exécuté à chaque fois qu'il est exécuté. L'état de la base de données sera restauré lors de sa prochaine exécution, il n'est donc pas fondamental qu'un autre scénario de test soit affecté par le scénario de test.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        before do
            @params = {name: 'A', age: 18}
        end

        context 'Si l'utilisateur a moins de 20 ans'do
            before do
                @params.merge!(age: 18)
            end
            it 'Attention Les commentaires sont affichés pour les moins de 20 ans' do
                user = User.new(@params)
                expect(user.alcol_age).to have_content 'Depuis que j'ai 20 ans'
            end
        end

        context 'Si l'utilisateur a plus de 20 ans'do
            before do
                @params.merge!(age: 20)
            end
            it 'Remarque Le commentaire doit être affiché pour les personnes de plus de 20 ans.' do
                user = User.new(@params)
                expect(user.alcol_age).to have_content 'Saké modérément!'
            end
        end
    end
end

let Coches variables pouvant être utilisées dans les tests. Pas une variable, mais le comportement utilisé est proche d'une variable

python


let (Nom de la définition) {Contenu de la définition}

let est appelé la première fois que let est appelé. (Évaluation du retard) Soyez donc prudent car il ne sera peut-être jamais appelé.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        let(:user) {User.new(params)}
        let(:params) {{name: 'A', age: age}}

        context 'Si l'utilisateur a moins de 20 ans'do
            let(:age) {18}
            it 'Attention Les commentaires sont affichés pour les moins de 20 ans' do
                expect(user.alcol_age).to have_content 'Depuis que j'ai 20 ans'
            end
        end

        context 'Si l'utilisateur a plus de 20 ans'do
            let(:age) {20}
            it 'Remarque Le commentaire doit être affiché pour les personnes de plus de 20 ans.' do
                expect(user.alcol_age).to have_content 'Saké modérément!'
            end
        end
    end
end

C'est tout pour l'essentiel D'autres grammaires seront ajoutées séparément.

Si vous avez des questions, je vous serais reconnaissant de bien vouloir demander un professeur.

Recommended Posts

Principes de base de Rspec [Rails]
Notions de base sur les rails
Rails CSV Basic
Principes de base du routage des rails
Principes de base de la base de données Rails
[Rails5] Rspec -validation-
Principes de base de Ruby on Rails
[Rails] Test avec RSpec
Rails, procédure d'installation RSpec
[Rails] Introduction aux principes de base du dispositif
[RSpec] Utilisons FactoryBot [Rails]
[Rails] Code de test à l'aide de Rspec
[Rails] À propos du test de réponse Rspec
Présentation de l'application de révision de livres Rails RSpec
[Rails5] Rspec -Test d'unité lors de l'imbrication-
[rails] Faisons un test unitaire avec Rspec!
[Rails g. Erreur]
Rails Examen 1
Bases de Ruby
[Rails] first_or_initialize
[Ruby on Rails] Afficher le test avec RSpec
Introduction de RSpec
rails tutry
Notions de base sur les fragments
Principes de base de JPA 1
À propos des rails 6
Principes de base de Docker
Principes de base de ViewPager
Fondation Rails
tutoriel sur les rails
Les bases de Java
rails tutry
Installation de RSpec
tutoriel sur les rails
Les bases de Java
Configuration RSpec
Rspec, TDD (1)
[Rails] concevoir
[Ruby on Rails] Test de modèle avec RSpec
rails tutry
Bonjour RSpec
Principes de base de JPA 2
tutoriel sur les rails
Les bases de Java
Conseils de rails
méthode des rails
tutoriel sur les rails
Principes de base de RecyclerView
Rails Revue 2
[Ruby on Rails] Jusqu'à l'introduction de RSpec