[RUBY] [3.] RSpec-Anfänger haben versucht, SystemSpec als Anfänger zu schreiben (endgültige Ausgabe)

Einführung

Dies ist der vorherige Artikel [[2nd] RSpec-Anfänger schrieb SystemSpec als Anfänger (Swamp Edition)](https://qiita.com/komaitaira/items/b9efc86cde48fb5ca8ef "[2nd] RSpec-Anfänger Es ist jedoch eine Fortsetzung von "Ich habe SystemSpec als Anfänger geschrieben (Numa Edition)") und es ist die endgültige Version von SystemSpec (Systemspezifikation).

Wenn Sie mehr über ModelSpec erfahren möchten, lesen Sie bitte hier. ..

Außerdem wurde neulich eine Lernsitzung für Anfänger (RSpec Beginners !!) mit der Freundlichkeit des RSpec-Mannes Junichi Ito @jnchito abgehalten. Ich habe auch an "RSpec Beginners !!") teilgenommen, daher denke ich, dass Sie Ihr Verständnis vertiefen können, indem Sie sich dieses Video ansehen. Schauen Sie also bitte nach, wenn Sie möchten.

Was ist in diesem Artikel zu tun?

In diesem Artikel nicht behandelt

Annahme

Artikel testen_spec.rb

① Verwenden Sie FactoryBot und bereiten Sie Artikeldaten im Voraus vor

Bereiten Sie die vorläufigen Daten mit dem bekannten FactoryBot vor. Es wurde zum Zeitpunkt von Teil 1 erstellt, wird jedoch auch beim Schreiben von Systemspezifikationen verwendet, sodass es unten als Referenz aufgeführt ist. Einzelheiten zu FactoryBot finden Sie im Artikel zu den Modellspezifikationen.

①spec/factories/articles.rb


FactoryBot.define do
  #Verwenden Sie FactoryBot und bereiten Sie Artikeldaten im Voraus vor
  FactoryBot.define do
  factory :article do
    title { "Testtitel" }
    body { "Testkörper" }
    is_active { true }
    company
    genre
  end
end

② Spezifische Codebeschreibung

Schreiben wir nun den Testcode. Wenn Sie $ rails g rspec: system articles ausführen, wird articles_spec.rb im Ordner spec / system erstellt. Der Testcode (tatsächliche Bewegung im Browser usw.) wird in diese Datei geschrieben. Unten finden Sie ein vollständiges Beispiel.

②spec/system/articles_spec.rb


require 'rails_helper'

RSpec.describe "Articles", type: :system do
  describe 'Artikelprüfung' do
    let(:company){FactoryBot.create(:company)}
    let(:genre){FactoryBot.create(:genre)}
    let!(:article){FactoryBot.create(:article, company: company, genre: genre)}
    before do
      visit new_company_session_path
      fill_in 'Mail Adresse', with: company.email
      fill_in 'Passwort', with: company.password
      click_button 'Einloggen'
    end
    describe 'Sidebar-Test' do
      context 'Überprüfen Sie die Anzeige' do
        it 'Die Artikelsuche wird angezeigt' do
          expect(page).to have_content "Artikelsuche"
          expect(current_path).to eq corporate_articles_path
        end
        it 'Die Artikelregistrierung wird angezeigt' do
          expect(page).to have_content "Artikelregistrierung"
          expect(current_path).to eq corporate_articles_path
        end
      end
    end

    describe 'Post-Test' do
      context 'Übergang zur neuen Artikelposting-Seite' do
        it 'Überleitung' do
          click_on 'Registrieren Sie einen Artikel'
          expect(page).to have_content "Neuen Artikel posten"
          expect(current_path).to eq new_corporate_article_path
        end
      end
      context 'Überprüfen Sie die Anzeige' do
        before do
          visit new_corporate_article_path
        end
        it 'Das obere Bild des Artikels wird angezeigt' do
          expect(page).to have_field 'article[image]'
        end
        it 'Das Genre-Auswahlfeld wird angezeigt' do
          expect(page).to have_select 'Genre'
        end
        it 'Ein Auswahlfeld für den Listenstatus wird angezeigt' do
          expect(page).to have_select 'Buchungsstatus'
        end
        it 'Das Artikeltitelformular wird angezeigt' do
          expect(page).to have_field 'Artikelüberschrift'
        end
        it 'Das Formular für den Artikelinhalt wird angezeigt' do
          expect(page).to have_field 'Artikelinhalt'
        end
        it 'Die Schaltfläche zum Posten von Artikeln wird angezeigt' do
          expect(page).to have_button 'Artikel posten'
        end
      end
      context 'Artikel posten' do
        before do
          visit new_corporate_article_path
        end
        it 'Erfolgreiches Posten' do
          select "Testgenre", from: 'Genre'
          select "Jetzt gepostet", from: 'Buchungsstatus'
          fill_in 'Artikelüberschrift', with: "RSpec ist schwierig"
          fill_in 'Artikelinhalt', with: "Es ist schwierig, aber ich bin froh, wenn die Testsuite durchläuft und alles grün wird."
          click_button "Artikel posten"
          expect(page).to have_content "Ich habe einen neuen Artikel gepostet."
        end
        it 'Buchung schlägt fehl' do
          fill_in 'Artikelüberschrift', with: ""
          click_button "Artikel posten"
          expect(page).to have_content "Der Artikel wurde aufgrund des Fehlers nicht gespeichert."
        end
      end
    end
  
    describe 'Test bearbeiten' do
      context 'Bestätigung des Übergangs zu jedem Bildschirm' do
        it 'Sie können zum Bildschirm mit den Artikeldetails wechseln' do
          click_on article.title
          expect(page).to have_content "Artikeldetails"
          expect(current_path).to eq corporate_article_path(article)
        end
        it 'Sie können zum Artikelbearbeitungsbildschirm wechseln' do
          visit corporate_article_path(article) #Übergang zum Artikeldetails-Bildschirm
          click_on "Bearbeiten"
          expect(page).to have_content "Bearbeitung von Artikelinformationen"
          expect(current_path).to eq edit_corporate_article_path(article)
        end
      end
      context 'Bestätigung der Anzeige und Bearbeitung' do
        before do
          visit edit_corporate_article_path(article)
        end
        it 'Das obere Bild des Artikels wird angezeigt' do
          expect(page).to have_field 'article[image]'
        end
        it 'Das Genre-Auswahlfeld wird angezeigt' do
          expect(page).to have_select('Genre', selected: 'テストGenre')
        end
        it 'Ein Auswahlfeld für den Listenstatus wird angezeigt' do
          expect(page).to have_select('Buchungsstatus', selected: 'Jetzt gepostet')
        end
        it 'Das Artikeltitelformular wird angezeigt' do
          expect(page).to have_field 'Artikelüberschrift', with: article.title
        end
        it 'Das Formular für den Artikelinhalt wird angezeigt' do
          expect(page).to have_field 'Artikelinhalt', with: article.body
        end
        it 'Die Schaltfläche zum Bearbeiten von Artikeln wird angezeigt' do
          expect(page).to have_button 'Speichern Sie Ihre Änderungen'
        end
        it 'Erfolgreiche Bearbeitung' do
          select "Posting ausgesetzt"
          fill_in 'Artikelüberschrift', with: "Ich werde aufhören zu posten, bis ich RSpec reibungslos schreiben kann"
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content 'Die Aktualisierung der Artikelinformationen ist abgeschlossen.'
          expect(page).to have_content '[Aktueller Veröffentlichungsstatus: Veröffentlichung ausgesetzt]'
          expect(current_path).to eq corporate_article_path(article)
        end
        it 'Die Bearbeitung schlägt fehl' do
          fill_in 'Artikelüberschrift', with: ""
          click_button 'Speichern Sie Ihre Änderungen'
          expect(page).to have_content "Der Artikel wurde aufgrund des Fehlers nicht gespeichert."
        end
      end
    end
  end
end


Wie ich in den Modellspezifikationen erklärt habe, wird der Artikel veröffentlicht ⑴ Es gibt eine Firma, ⑵ Es gibt ein Artikelgenre, ⑶ Artikel können veröffentlicht werden Es ist ein Fluss geworden. Daher können Sie verstehen, dass ein Unternehmen existiert, und es ist erforderlich, ein Genre im Voraus auszuwählen, um einen Artikel zu veröffentlichen. Beachten Sie, dass der Unterschied zum letzten Mal darin besteht, dass die von FactoryBot erstellten Daten mit let und nicht mit der Instanzvariablen gespeichert werden.


Lassen Sie uns nun über das Testen von Artikelbeiträgen sprechen. Einen Anzeigetest finden Sie im ausgefüllten Codebeispiel. Vielleicht werden Sie, die bis zu diesem dritten Mal gelesen haben, verstehen, ohne es zu erklären. Bitte beachten Sie, dass es nur für have_ ◯◯ mehrere Typen gibt. Siehe das folgende Codebeispiel.

②spec/system/articles_spec.rb


      context 'Artikel posten' do
        before do
          visit new_corporate_article_path
        end
        it 'Erfolgreiches Posten' do
          select "Testgenre", from: 'Genre' # セレクトボックスからGenreを選択
          select "Jetzt gepostet", from: 'Buchungsstatus' # セレクトボックスからBuchungsstatus(Jetzt gepostet or 掲載停止中)wählen
          fill_in 'Artikelüberschrift', with: "RSpec ist schwierig" #Titel eingeben
          fill_in 'Artikelinhalt', with: "Es ist schwierig, aber ich bin froh, wenn die Testsuite durchläuft und alles grün wird." # Artikelinhaltを入力
          click_button "Artikel posten" # Artikel postenボタンを押下
          expect(page).to have_content "Ich habe einen neuen Artikel gepostet." 
        end
        it 'Buchung schlägt fehl' do
          fill_in 'Artikelüberschrift', with: ""
          click_button "Artikel posten"
          expect(page).to have_content "Der Artikel wurde aufgrund des Fehlers nicht gespeichert."
        end
      end

Im obigen Codebeispiel wechseln wir zunächst zu der Seite, auf der das Post-Formular im Vorher-Block angezeigt wird. Als nächstes Post-Formular 1. Genre auswählen, 2. Posting-Status auswählen, 3. Titel eingeben, 4. Artikelinhalt eingeben und die Post-Taste drücken.

** Stolperpunkt: Umarmen: "Auswahlfeld auswählen" ** In der Auswahl des obigen Auswahlfelds wird es als "Auswahl" Testgenre "beschrieben, aus:" Genre ". Vielleicht ist es kein Stolperstein, wenn Sie es normal machen, aber ich hatte auch hier große Probleme, also werde ich es teilen. Die Ursache für das Stolpern war, dass das ** Etiketten-Tag nicht richtig geschrieben wurde ** und ich das Auswahlfeld nicht gut auswählen konnte. Hier erfahren Sie, wie Sie mein falsches Etikett schreiben.

Ruby:corporate/articles/new.html.erb


<%= f.label :Genre%><br>
<%= f.collection_select :genre_id, Genre.all, :id, :genre_name, include_blank: "--Bitte auswählen--" %>

Die Beschreibung von <% = f.label: Genre%> ist falsch. Es wird problemlos im Browser angezeigt, aber wenn ich es mit dem Verifikationstool überprüfe Aus irgendeinem Grund ist das Attribut for eine Mischung aus Englisch und Japanisch (for = "article_genre"), z. B. "

Ruby:corporate/articles/new.html.erb


<%= f.label :genre_id, "Genre" %><br>
<%= f.collection_select :genre_id, Genre.all, :id, :genre_name, include_blank: "--Bitte auswählen--" %>

** Hinzugefügt am 2. Oktober 2020 ** In Bezug auf das Schreiben des obigen Label-Tags scheint es besser zu sein, die übersetzte Version in eine YAML-Datei einzufügen und in der Ansicht anzuzeigen, als sie in Form eines "Genres" fest in die Ansicht zu schreiben. Ich werde es einmal so beschreiben, aber ich werde es später beheben.

Die Anzeige mit dem Überprüfungstool lautet "

Anstatt den Test zu beschreiben, mag es ein einfacher Teil sein, weil die Ansicht an erster Stelle falsch geschrieben wurde, aber als ich in den Kommentaren des zweiten Artikels Ratschläge erhielt, verstand ich schließlich die Ursache.

Es gibt vielleicht nicht viele Leute, die damit zu kämpfen haben, aber vorerst dieser Artikel [HTML] Warum sollten Sie das Attribut for zum lavel-Tag hinzufügen? Gründliche Erklärung zur Verwendung! Erläutert das label-Tag im Detail.

Wenn das Attribut ** for einen geeigneten Wert enthält (in diesem Fall genre_id), wird es wahrscheinlich programmgesteuert mit dem Eingabeelement ** verknüpft. Ich habe viel gelernt. Wenn der Test aus irgendeinem Grund nicht wie ich besteht, können Sie ihn mit dem Verifikationstool von Chrome überprüfen!

Der Test, der den Rest der Beiträge nicht besteht, und der Test zum Bearbeiten des Artikels sind im Grunde der gleiche wie zuvor. Schreiben Sie ihn daher bitte unter Bezugnahme auf den vollständigen Code!

Testräume_spec.rb

① Spezifische Codebeschreibung

Der Test ist endlich vorbei! Dieser DM / Benachrichtigungstest beendet den Kernfunktionstest. geben wir unser Bestes! FactoryBot wird in diesem Test übrigens nicht verwendet. Unten finden Sie ein Beispiel für den vollständigen Code.

①spec/system/rooms_spec.rb


require 'rails_helper'

RSpec.describe "Rooms", type: :system do
  let(:user){FactoryBot.create(:user)}
  let!(:company){FactoryBot.create(:company)}

  describe 'DM-Test' do
    before do
      visit new_user_session_path
      fill_in 'Mail Adresse', with: user.email
      fill_in 'Passwort', with: user.password
      click_button 'Einloggen'
      expect(page).to have_content 'Sie sind jetzt angemeldet.'
    end

    context 'Überprüfen Sie die Anzeige' do
      it 'Sie können zur Expertenliste wechseln' do
        click_on 'Experte'
        expect(current_path).to eq companies_path
      end
      it 'Eine Schaltfläche zum Wechseln zum Bildschirm mit den Unternehmensdetails und zum Starten von DM wird angezeigt' do
        visit companies_path
        click_on 'Test Co., Ltd.'
        expect(current_path).to eq company_path(company)
        expect(page).to have_content 'Test Co., Ltd.'
        expect(page).to have_button 'Starten Sie DM'
      end
    end

    context 'Individuelle Seite: Senden einer Nachricht' do
      before do
        visit company_path(company) #Wechseln Sie zum Bildschirm mit den Unternehmensdetails
        click_on 'Starten Sie DM'
      end
      it 'Sie können den Chatraum betreten und das Anmeldeformular wird angezeigt' do
        expect expect(page).to have_field 'Bitte geben Sie eine Nachricht ein'
      end
      it 'Kann Nachrichten senden' do
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        expect(page).to have_content 'Test Nachricht'
      end
      it 'Nach dem Senden einer Nachricht wird der Sendeverlauf zum DM-Listenbildschirm hinzugefügt' do
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        expect(page).to have_content 'Test Nachricht' #Nachrichten im Chatraum
        visit rooms_path
        expect(page).to have_content 'Test Nachricht' #DM-Listenbildschirmmeldung
        expect(page).to have_link 'Nachricht ansehen'
      end
    end

    context 'Unternehmensseite: Nachricht empfangen und senden(Antworten)' do
      before do
        #Senden Sie eine Nachricht auf der einzelnen Seite
        visit company_path(company)
        click_on 'Starten Sie DM'
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        logout(user)
        #Unternehmensanmeldung
        visit new_company_session_path
        fill_in 'Mail Adresse', with: company.email
        fill_in 'Passwort', with: company.password
        click_button 'Einloggen'
        expect(page).to have_content 'Sie sind jetzt angemeldet.'
      end

      it 'Die Anzahl der Benachrichtigungen wird in der Kopfzeile angezeigt' do
        expect(page).to have_content '1 Benachrichtigung'
      end
      it 'Sie können über den Link zum Bildschirm mit der Benachrichtigungsliste wechseln und den Empfang von Nachrichten einzelner Benutzer überprüfen.' do
        click_on 'Benachrichtigung'
        expect(page).to have_content 'Benachrichtigung'
        expect(page).to have_content 'Es gibt eine Nachricht von Test Taro'
      end
      it 'Sie können den Chatraum über den Link betreten und die empfangene Nachricht wird angezeigt' do
        click_on 'Benachrichtigung'
        click_on 'Botschaft'
        expect expect(page).to have_content 'Test Nachricht'
      end
      it 'Kann Nachrichten senden' do
        click_on 'Benachrichtigung'
        click_on 'Botschaft'
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Antwort auf Testnachricht'
        click_button 'Senden'
        expect(page).to have_content 'Antwort auf Testnachricht'
      end
    end
  end
end

Im DM / Benachrichtigungstest möchte ich für die Einzel- und die Unternehmensseite getrennt erläutern. Erstens ist der ** Einzeltest **. Siehe das folgende Codebeispiel.

[Einzelseite] DM / Benachrichtigungstest

①spec/system/rooms_spec.rb


    context 'Individuelle Seite: Senden einer Nachricht' do
      before do
        visit company_path(company) #Wechseln Sie zum Bildschirm mit den Unternehmensdetails
        click_on 'Starten Sie DM'
      end
      it 'Sie können den Chatraum betreten und das Anmeldeformular wird angezeigt' do
        expect expect(page).to have_field 'Bitte geben Sie eine Nachricht ein'
      end
      it 'Kann Nachrichten senden' do
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        expect(page).to have_content 'Test Nachricht'
      end
      it 'Nach dem Senden einer Nachricht wird der Sendeverlauf zum DM-Listenbildschirm hinzugefügt' do
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        expect(page).to have_content 'Test Nachricht' #Nachrichten im Chatraum
        visit rooms_path
        expect(page).to have_content 'Test Nachricht' #DM-Listenbildschirmmeldung
        expect(page).to have_link 'Nachricht ansehen'
      end
    end

Ich denke, es gibt einige besonders schwierige Punkte.

** Im Test 'Kann Nachricht senden' **

  1. fill_in'Enter message 'mit:' Test message' ⇨ Geben Sie die String-Testnachricht in das Textfeld ein
  2. click_button'Send'⇨ Drücken Sie die Senden-Taste
  3. require (page) .to have_content'test message' ⇨ Bestätigen Sie, dass die Nachricht gesendet wurde, indem Sie die Zeichenfolge" test message "auf derselben Seite erwarten.

Es ist ein Fluss geworden. チャットルーム内メッセージ

** Im Test "Nach dem Senden einer Nachricht wird der Übertragungsverlauf zum DM-Listenbildschirm hinzugefügt" **

  1. ** 1. ** `erwarten (Seite) .zu_inhaltstest Nachricht'`` Überprüfen Sie die gesendete Nachricht im Chatraum
  2. visit room_path ⇨ Zum DM-Listenbildschirm wechseln
  3. ** Zweitens ** erwarten (Seite) .zu_inhalt'Testnachricht' ⇨ Vergewissern Sie sich, dass die neueste Nachricht auf dem DM-Listenbildschirm angezeigt wird

Es ist ein Fluss geworden. DM一覧画面メッセージ

Das Obige ist der DM-Test auf der Einzelseite. Als nächstes möchte ich den Test auf der Unternehmensseite erläutern. Siehe das folgende Codebeispiel.

[Unternehmensseite] DM / Benachrichtigungstest

①spec/system/rooms_spec.rb


    context 'Unternehmensseite: Nachricht empfangen und senden(Antworten)' do
      before do
        #Senden Sie eine Nachricht auf der einzelnen Seite
        visit company_path(company)
        click_on 'Starten Sie DM'
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Test Nachricht'
        click_button 'Senden'
        logout(user)
        #Unternehmensanmeldung
        visit new_company_session_path
        fill_in 'Mail Adresse', with: company.email
        fill_in 'Passwort', with: company.password
        click_button 'Einloggen'
        expect(page).to have_content 'Sie sind jetzt angemeldet.'
      end

      it 'Die Anzahl der Benachrichtigungen wird in der Kopfzeile angezeigt' do
        expect(page).to have_content '1 Benachrichtigung'
      end
      it 'Sie können über den Link zum Bildschirm mit der Benachrichtigungsliste wechseln und den Empfang von Nachrichten einzelner Benutzer überprüfen.' do
        click_on 'Benachrichtigung'
        expect(page).to have_content 'Benachrichtigung'
        expect(page).to have_content 'Es gibt eine Nachricht von Test Taro'
      end
      it 'Sie können den Chatraum über den Link betreten und die empfangene Nachricht wird angezeigt' do
        click_on 'Benachrichtigung'
        click_on 'Botschaft'
        expect expect(page).to have_content 'Test Nachricht'
      end
      it 'Kann Nachrichten senden' do
        click_on 'Benachrichtigung'
        click_on 'Botschaft'
        fill_in 'Bitte geben Sie eine Nachricht ein', with: 'Antwort auf Testnachricht'
        click_button 'Senden'
        expect(page).to have_content 'Antwort auf Testnachricht'
      end
    end

Dies ist auch nicht besonders schwierig. Beschreiben Sie zunächst im Vorher-Block bis zu dem Punkt, an dem die einzelne Seite eine Nachricht gesendet und dann das Unternehmen angemeldet hat. ** 'Die Anzahl der Benachrichtigungen wird in der Kopfzeile angezeigt' ** Im Test require (page) .to have_content '1 Notification' ⇨ Überprüfen Sie nach dem Anmelden, ob in der Kopfzeile die Anzahl der Benachrichtigungen entsprechend der Anzahl der Nachrichten und ein Link zur Benachrichtigungsliste angezeigt wird.

DM一覧画面メッセージ

** 'Sie können über den Link zum Benachrichtigungslistenbildschirm wechseln und den Empfang von Nachrichten einzelner Benutzer bestätigen' ** Im Test require (page) .to have_content'Es gibt eine Nachricht von Test Taro' ⇨ Wenn Sie zum Bildschirm mit der Benachrichtigungsliste wechseln, können Sie überprüfen, von wem die Nachricht stammt.

DM一覧画面メッセージ

Alles, was Sie tun müssen, ist, den Chatraum zu betreten, zu überprüfen, ob eine Nachricht kommt, und zu prüfen, ob Sie auch von hier aus eine Nachricht senden (beantworten) können.

DM一覧画面メッセージ

Dies ist der DM / Benachrichtigungstest.

Am Ende

Dieses Mal haben wir die Veröffentlichung, Bearbeitung, DM und Benachrichtigungstests von Artikeln nach Systemspezifikationen zusammengefasst. Dies vervollständigt die Systemspezifikationen, die ich in zwei Teilen geschrieben habe! Ich habe es als Rezension von mir selbst geschrieben, aber ich dachte wieder, dass es noch Verbesserungen gibt. Ich möchte kleine Korrekturen vornehmen, damit Anfänger, die dies sehen, nicht sagen: "Was ist das, ich verstehe nicht!".

Anfangs hatte ich viele Probleme mit Dingen, die ich nicht verstand, aber trotzdem die Lernsitzung für Anfänger neulich RSpec Beginners !! Ich konnte selbst mehr Tests schreiben als bei meiner Teilnahme, und wenn ich etwas gefragt werde, kann ich den Leuten ein wenig erzählen.

Wir möchten Herrn Ito (@jnchito) für die Bereitstellung dieser Gelegenheit und allen Personen, die uns eingeladen haben, danken.

Auch wenn es kindisch ist, hoffe ich, dass dieser Artikel RSpec-Anfängern helfen wird. Danke, dass du bis zum Ende zugesehen hast!

Referenzartikel

[Einführung in RSpec, die verwendet werden kann, Teil 4 "Jede Browseroperation ist kostenlos! Reverse Capybara Encyclopedia"](https://qiita.com/jnchito/items/607f956263c38a5fec24 "Einführung in RSpec, die verwendet werden kann, Teil 4" Jede Browseroperation ist kostenlos ! Reverse Capybara Encyclopedia "") [HTML] Warum sollte das Attribut for zum lavel-Tag hinzugefügt werden? Gründliche Erklärung zur Verwendung!

Recommended Posts

[3.] RSpec-Anfänger haben versucht, SystemSpec als Anfänger zu schreiben (endgültige Ausgabe)
[2.] RSpec-Anfänger haben SystemSpec als Anfänger geschrieben (Numa Edition)
[1st] RSpec-Anfänger haben versucht, Model Spec als Anfänger zu schreiben