[Ruby on Rails] Test mit RSpec anzeigen

Entwicklungsumgebung

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

Annahme

Wir werden davon ausgehen, dass dies getan wird. [Ruby on Rails] Bis zur Einführung von RSpec

Klicken Sie hier, um das Modell zu testen [Ruby on Rails] Modelltest mit RSpec

Klicken Sie hier, um den Controller zu testen [Ruby on Rails] Controller-Test mit RSpec

Testvorbereitung anzeigen

・ Eine Datei erstellen

① Erstellen Sie einen Systemordner und einen Fabrikordner unter Spezifikation. Erstellen Sie im Systemordner auch die Ansichtsdatei, die Sie testen möchten. Erstellen Sie ein Modell mit Dummy-Daten im Ordner "Fabriken".

Diesmal um die Ansicht des Beitrags zu testen Die Dateistruktur ist wie folgt.

spec/system/post_spec.rb
→ Beschreiben Sie den Inhalt, den Sie testen möchten.

spec/factories/post.rb
spec/factories/user.rb
→ Dummy-Daten erstellen.

② Ermöglicht die Verwendung von FactoryBot. Es ist praktisch, es zu verwenden, da Sie die Datenbank registrieren und das Modell wie user = create (: user) erstellen können. Erstellen Sie unter spec einen Support-Ordner und eine Datei factory_bot.rb und beschreiben Sie diese wie folgt.

spec/support/factory_bot.rb


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

Fügen Sie dann Folgendes hinzu:

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' #<-Addition

...

Bearbeiten von spec_helper.rb

RSpec den folgenden Inhalt.configure do |config|Hinzufügen.

spec/spec_helper.rb


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

...

end

Tatsächlicher Code

Erstellen Sie zunächst Dummy-Daten.

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

Schreiben Sie als nächstes den Testcode.

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 'Einloggen'
    visit user_posts_path(user, post)
  end
  describe 'Test anzeigen' do
    context 'Neuer Post-Bildschirm' do
      before do
        visit new_user_post_path(user, post)
      end
      it 'Körperform wird angezeigt' do
        expect(page).to have_field 'post[body]'
      end
      it 'Neue Post-Schaltfläche wird angezeigt' do
        expect(page).to have_button 'Neuer Beitrag'
      end
    end
  end
  describe 'Test bearbeiten' do
    context 'Übergang zum Bearbeitungsbildschirm Ihres Beitrags' do
      it 'Kann übergehen' 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 'Übergang zum Bearbeitungsbildschirm des Beitrags einer anderen Person' do
      it 'Übergang nicht möglich' do
        visit edit_user_post_path(user, post2)
        expect(current_path).to eq('/users/' + user.id.to_s + '/posts')
      end
    end
  end
end

Führen Sie dann in Ihrem Terminal folgende Schritte aus:

Terminal


$ rspec spec/requests

Wenn Sie eine Fehlermeldung erhalten, versuchen Sie dies bitte ebenfalls

Terminal


$ bundle exec rspec spec/system --format documentation

Wenn Sie den Test bestehen

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

Da es so angezeigt wird, bedeutet dies, dass der Testinhalt korrekt ist.

Referenz (Auszug aus dem Modelltest)

[Ruby on Rails] Modelltest mit RSpec Im Gegenteil, wenn es den Test nicht besteht, können Sie sehen, wo der Fehler auf diese Weise auftritt Sie können feststellen, ob der Testcode falsch ist, die Validierung falsch ist und so weiter.

Failures:

  1)Post-Model-Test Titelspalte des Validierungstests Darf maximal 20 Zeichen enthalten
     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-Model-Test Titelspalte des Validierungstests Darf nicht leer sein
     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-Model-Test Titelspalte des Validierungstests Darf maximal 20 Zeichen enthalten
rspec ./spec/models/post_spec.rb:15 #Post-Model-Test Titelspalte des Validierungstests Darf nicht leer sein

Verwenden Sie außerdem rspec ./spec/models/post_spec.rb:11 unten. Sie können den Testinhalt auch einzeln überprüfen, wie unten gezeigt.

Terminal


$ rspec spec/models/post_spec.rb:11

Zusammenfassung

Diesmal Erstellen Sie zunächst Dummy-Daten. Nachdem Sie sich tatsächlich auf dem Anmeldebildschirm angemeldet haben

  1. Gehen Sie während der Anmeldung zum Buchungsbildschirm und prüfen Sie, ob die Anzeige korrekt ist. 2, Ist es möglich, zum Buchungsbildschirm einer anderen Person zu wechseln? Ich habe diese beiden Punkte getestet.

Weil es auch eine Möglichkeit gibt, Javascript zu testen Wenn Sie interessiert sind, überprüfen Sie es bitte.

Auf Twitter werden auch Technologien und Ideen hochgeladen, die nicht auf Qiita hochgeladen wurden Ich wäre Ihnen dankbar, wenn Sie mir folgen könnten. Klicken Sie hier für Details https://twitter.com/japwork

Recommended Posts

[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Controller-Test mit RSpec
[Ruby on Rails] Modelltest mit RSpec
[Schienen] Test mit RSpec
Einführung in Rspec mit Ruby on Rails x Docker
Verstehen Sie die Codeabdeckung mit Rspec, dem Ruby on Rails-Testframework
Einführung in Rspec, ein Testframework für Ruby on Rails
Führen Sie Ruby on Rails RSpec-Tests mit GitHub-Aktionen aus
[Schienen] Machen wir einen Unit-Test mit Rspec!
Hinweise zur Verwendung von FCM mit Ruby on Rails
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Testen Sie Nokogiri mit Rspec.
Ruby On Rails Association
Veröffentlichen Sie die mit Ruby on Rails erstellte App
[Rails] Verfahren zum Verknüpfen von Datenbanken mit Ruby On Rails
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Löschen Sie s3-Bilder mit Active Strage
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
Testen Sie Active Strage mit RSpec
Ruby on Rails lernen Rekord-2020.10.07 ②
[Rails] Testcode mit Rspec
[Ruby On Rails] Testfehler mit RSpec MySQL-Client ist nicht verbunden
Testen Sie den GraphQL-Resolver mit rspec
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
[Rails] Informationen zum Rspec-Antworttest
Ruby on Rails Lernrekord -2020.10.06
Zusammenfassung der Ruby on Rails-Validierung
Site Map im RSS / Atom-Format mit Ruby on Rails erstellt
Ruby on Rails Grundlegendes Memorandum
Ich habe versucht, das Ruby on Rails-Plugin mit vim-plug zu installieren
[Ruby on Rails] Fügen Sie eine Spalte mit externen Schlüsselbeschränkungen hinzu
[Ruby on Rails] Implementieren Sie die Anmeldefunktion von add_token_to_users mit API
Wenden Sie CSS auf eine bestimmte Ansicht in Ruby on Rails an
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Ruby on Rails-Variablen, konstante Zusammenfassung
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Grundkenntnisse in Ruby on Rails
Progate Ruby on Rails5 Rückblick
Verwendung von Ruby on Rails