ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
[Ruby on Rails] Bis zur Einführung von RSpec Wir werden davon ausgehen, dass dies getan wird.
Dieses Mal werden wir testen, ob es eine Titelspalte und die Anzahl der Zeichen gibt.
app/models/post.rb
class Post < ApplicationRecord
belongs_to :user
validates :title, presence: true, length: {maximum: 20}
end
① Modellordner und Fabrikordner unter Spezifikation erstellen, Erstellen Sie auch eine Datei für das Modell, das Sie testen möchten. Dieses Mal werden wir das Postmodell testen. Um sicherzustellen, dass Benutzer nur Beiträge verfassen können, während sie angemeldet sind, Erstellen Sie auch ein Verwendungsmodell. Die Dateistruktur ist wie folgt. spec/models/post_spec.rb → Beschreiben Sie, was 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
...
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/models/post_spec.rb
require 'rails_helper'
RSpec.describe 'Testen nach dem Modell', type: :model do
describe 'Validierungstest' do
#Verwenden Sie die von Fabriken erstellten Dummy-Daten.
let(:user) { FactoryBot.create(:user) }
let!(:post) { build(:post, user_id: user.id) }
# test_Erstellen Sie einen Beitrag und prüfen Sie, ob Sie sich in der Lücke registrieren können.
subject { test_post.valid? }
let(:test_post) { post }
context 'Titelspalte' do
it 'Darf nicht leer sein' do
test_post.title = ''
is_expected.to eq false;
end
it 'Muss 20 Zeichen oder weniger enthalten' do
post.title = Faker::Lorem.characters(number:21)
expect(post.valid?).to eq false;
end
end
end
describe 'Assoziationen testen' do
context 'Beziehung zum Kundenmodell' do
it 'N:Ist 1' do
expect(Post.reflect_on_association(:user).macro).to eq :belongs_to
end
end
# has_Es wird auch durch viele Beziehungen beschrieben.
# context 'Beziehung zum PostComment-Modell' do
# it '1:Ist N.' do
# expect(Post.reflect_on_association(:post_comments).macro).to eq :has_many
# end
# end
end
end
Führen Sie dann in Ihrem Terminal folgende Schritte aus:
$ rspec spec/models
Wenn Sie den Test bestehen
Finished in 0.52408 seconds (files took 2.11 seconds to load)
3 examples, 0 failures
Da es so angezeigt wird, bedeutet dies, dass der Testinhalt korrekt ist.
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 1, Validierung, um eine Registrierung mit leerem Vorhandensein zu verhindern: true 2, Validierung der Zeichenbegrenzungslänge: {Maximum: 20} 3, Bestätigung der Beziehungsbeziehung gehört: Benutzer
Ich habe das oben Genannte getestet, aber es gibt viele andere Testmethoden 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