ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
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
① 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
...
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
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.
[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
Diesmal Erstellen Sie zunächst Dummy-Daten. Nachdem Sie sich tatsächlich auf dem Anmeldebildschirm angemeldet haben
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