[RUBY] Rspec Basics [Rails]

Ein Memorandum der grundlegenden Grammatik von RSpec

Einführung

Die Funktion des Testbeispielsatzes ist grob geschrieben, so dass er leicht zu merken ist. Wir können daher nicht garantieren, dass er für die Programmierung geeignet ist.

Verweise Ruby on Rails5-Kurzanleitung für das schnelle Lernen, die vor Ort verwendet werden kann

Einführung in RSpec, die verwendet werden kann, Teil 1 https://qiita.com/jnchito/items/42193d066bd61c740612

Im voraus vorbereiten

Erstellen Sie mit dem Rails-Generator ein geeignetes Gerüst

python


rails new plactice

python


rails db:create

python


rails g scaffold user name:string age:integer

python


rails db:migrate

python


rails s

Damit ist die Erstellung der Vorlage abgeschlossen. Erstellen Sie user.rb im Modellverzeichnis wie unten gezeigt

model/user.rb


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

    def alcol
        if @age < 20
            "Seit ich 20 Jahre alt war"
        else
            "Mäßig sake!"
        end
    end
end

Komplett mit RSpec-bezogenen Edelsteinen und Einstellungen.

Testfälle organisieren und klassifizieren

describe Deklarieren Sie die Testgruppierung und beschreiben Sie, welche Spezifikationen Sie testen möchten.

beschreiben kann verschachtelt werden Beschreiben Sie auf der äußersten Seite das Thema der gesamten Datei. Je tiefer das Nest, desto feiner das Thema.

python


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

    end

end

RSpec hinzufügen. Zur äußersten Beschreibung.

context

Die Funktion ist dieselbe (Alias) wie beschrieben, aber die verwendete Bedeutung ist unterschiedlich. Es wird verwendet, wenn Sie die Testinhaltsbedingungen für jede Variation teilen möchten.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Wenn der Benutzer unter 20 ist'do
            
        end

        context 'Wenn der Benutzer über 20 Jahre alt ist'do
            
        end
    end
end

it Beschreiben Sie das erwartete Verhalten der Funktion als Satz. Schreiben Sie hier eine Testaussage Und es ist in einer Einheit namens Beispiel zusammengefasst.

Wenn alle Pfade darin übergeben werden, bedeutet dies, dass das Beispiel (Test) bestanden wurde.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Wenn der Benutzer unter 20 ist'do
            it 'Achtung Kommentare werden für unter 20 Jahre angezeigt' do
                user = User.new(name: 'A', age: 18)
                expect(user.alcol_age).to have_content 'Seit ich 20 Jahre alt war'
            end
        end

        context 'Wenn der Benutzer über 20 Jahre alt ist'do
            it 'Hinweis Der Kommentar muss für Personen über 20 Jahre angezeigt werden.' do
                user = User.new(name: 'A', age: 20)
                expect(user.alcol_age).to have_content 'Mäßig sake!'
            end
        end
    end
end

before Wenn before in description oder context beschrieben ist, wird der im before-Block geschriebene Code ausgeführt, bevor der Testcode in diesem Bereich ausgeführt wird. Früher habe ich einen Benutzer damit erstellt, aber das vorherige Schreiben ist einfacher zu lesen und kann unter mehreren Bedingungen verwendet werden, sodass der Effekt, es trocken zu machen, auch erzielt werden kann.

python


RSpec.describe 'User' do
    describe '#alcol_age' do
        context 'Wenn der Benutzer unter 20 ist'do
            it 'Achtung Kommentare werden für unter 20 Jahre angezeigt' do
                user = User.new(name: 'A', age: 18)
                expect(user.alcol_age).to have_content 'Seit ich 20 Jahre alt war'
            end
        end

        context 'Wenn der Benutzer über 20 Jahre alt ist'do
            it 'Hinweis Der Kommentar muss für Personen über 20 Jahre angezeigt werden.' do
                user = User.new(name: 'B', age: 20)
                expect(user.alcol_age).to have_content 'Mäßig sake!'
            end
        end
    end
end

before wird jedes Mal ausgeführt, wenn es ausgeführt wird. Der Status der Datenbank wird zum Zeitpunkt der nächsten Ausführung wiederhergestellt, sodass grundsätzlich kein anderer Testfall vom Testfall betroffen ist.

python


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

        context 'Wenn der Benutzer unter 20 ist'do
            before do
                @params.merge!(age: 18)
            end
            it 'Achtung Kommentare werden für unter 20 Jahre angezeigt' do
                user = User.new(@params)
                expect(user.alcol_age).to have_content 'Seit ich 20 Jahre alt war'
            end
        end

        context 'Wenn der Benutzer über 20 Jahre alt ist'do
            before do
                @params.merge!(age: 20)
            end
            it 'Hinweis Der Kommentar muss für Personen über 20 Jahre angezeigt werden.' do
                user = User.new(@params)
                expect(user.alcol_age).to have_content 'Mäßig sake!'
            end
        end
    end
end

let Variable Ticks, die in Tests verwendet werden können. Keine Variable, aber das verwendete Verhalten kommt einer Variablen nahe

python


let (Definitionsname) {Inhalt der Definition}

let wird beim ersten Aufruf von let aufgerufen. (Verzögerungsbewertung) Seien Sie also vorsichtig, da es niemals aufgerufen werden darf.

python


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

        context 'Wenn der Benutzer unter 20 ist'do
            let(:age) {18}
            it 'Achtung Kommentare werden für unter 20 Jahre angezeigt' do
                expect(user.alcol_age).to have_content 'Seit ich 20 Jahre alt war'
            end
        end

        context 'Wenn der Benutzer über 20 Jahre alt ist'do
            let(:age) {20}
            it 'Hinweis Der Kommentar muss für Personen über 20 Jahre angezeigt werden.' do
                expect(user.alcol_age).to have_content 'Mäßig sake!'
            end
        end
    end
end

Das ist alles für die Grundlagen Andere Grammatiken werden separat hinzugefügt.

Wenn Sie Fragen haben, wäre ich Ihnen dankbar, wenn Sie nach einem Professor fragen könnten.

Recommended Posts

Rspec Basics [Rails]
Rails Grundlagen
Schienen CSV Basic
Grundlagen des Rails-Routings
Grundlagen der Rails-Datenbank
[Rails5] Rspec -validierung-
Ruby on Rails Grundlagen
[Schienen] Test mit RSpec
Schienen, RSpec-Installationsverfahren
[Rails] Einführung in die Grundlagen der Entwicklung
[RSpec] Verwenden wir FactoryBot [Rails]
[Rails] Testcode mit Rspec
[Rails] Informationen zum Rspec-Antworttest
Rails Buchbesprechung App RSpec Einführung
[Rails5] Rspec -Einheitentest beim Verschachteln-
[Schienen] Machen wir einen Unit-Test mit Rspec!
[Schienen g. Fehler]
Rails Review 1
Ruby-Grundlagen
[Rails] first_or_initialize
[Ruby on Rails] Test mit RSpec anzeigen
Einführung von RSpec
Schienen Tutry
Fragmentgrundlagen
JPA-Grundlagen 1
Über Schienen 6
Docker-Grundlagen
ViewPager-Grundlagen
Schienenfundament
Schienen Tutorial
Java-Grundlagen
Schienen Tutry
RSpec-Installation
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
Java-Grundlagen
RSpec Setup
Rspec, TDD (1)
[Schienen] erfinden
[Ruby on Rails] Modelltest mit RSpec
Schienen Tutry
Hallo RSpec
JPA-Grundlagen 2
Schienen Tutorial
Java-Grundlagen
Schienen Tipps
Schienenmethode
Schienen Tutorial
RecyclerView-Grundlagen
Rails Review 2
[Ruby on Rails] Bis zur Einführung von RSpec