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
Diesmal nur, wenn sich der Benutzer anmeldet Testen Sie, ob es angezeigt wird.
app/controllers/posts_controller.rb
class Admins::PostsController < ApplicationController
before_action :authenticate_user!
def index
@posts = Post.all
end
end
① Erstellen Sie einen Anforderungsordner und einen Fabrikordner unter Spezifikation. Erstellen Sie im Anforderungsordner auch eine Datei für den Controller, den Sie testen möchten Erstellen Sie ein Modell mit Dummy-Daten im Ordner "Fabriken".
Diesmal zum Testen des Postcontrollers Die Dateistruktur ist wie folgt.
spec/requests/posts_request_spec.rb
→ Beschreiben Sie den Inhalt, den Sie testen möchten.
spec/factories/post.rb
spec/factories/admin.rb
→ Dummy-Daten erstellen.
② Ermöglicht die Verwendung von FactoryBot. Die Verwendung ist praktisch, 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
...
Die folgenden InhalteRSpec.configure do |config|
Hinzufügen.
spec/rails_helper.rb
RSpec.configure do |config|
...
config.include Devise::Test::IntegrationHelpers, type: :request # <--hinzufügen
end
Erstellen Sie zunächst Dummy-Daten.
spec/factories/admin.rb
FactoryBot.define do
factory :admin 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) }
admin
end
end
Schreiben Sie als nächstes den Testcode.
spec/requests/posts_request_spec.rb
require 'rails_helper'
RSpec.describe "Post-Controller-Test", type: :request do
let(:admin) { create(:admin) }
let(:post) { create(:post) }
describe 'Eingeloggt' do
before do
sign_in admin
end
context "Die Postlistenseite wird korrekt angezeigt" do
before do
get admins_posts_path
end
it 'Anfrage sollte 200 OK sein' do
expect(response.status).to eq 200
end
it 'Der Titel wird korrekt angezeigt' do
expect(response.body).to include("Beitragsliste")
end
end
end
describe 'Nicht anmelden' do
context "Wechselt nicht zur Postlistenseite" do
before do
get admins_posts_path(admin)
end
it 'Anfrage sollte 401 OK sein' do
expect(response.status).to eq 401
end
end
end
# get admins_posts_path(admin)In diesem Fall handelt es sich um einen 401-Fehler, da das Kennwort unterschiedlich ist.
# get admins_posts_Wenn es sich um einen Pfad handelt, handelt es sich um eine 302-Weiterleitung. Beschreiben Sie ihn daher bitte durch die Person, die Sie testen möchten.
# describe 'Nicht anmelden' do
# context "Wechselt nicht zur Postlistenseite" do
# before do
# get admins_posts_path
# end
# it 'Anfrage sollte 302 OK sein' do
# expect(response.status).to eq 302
# end
# end
# end
end
Führen Sie dann in Ihrem Terminal folgende Schritte aus:
Terminal
$ rspec spec/requests
Wenn Sie den Test bestehen
Finished in 3.64 seconds (files took 2.75 seconds to load)
3 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 1, Wird der Bildschirm mit der Beitragsliste korrekt angezeigt, während Sie angemeldet sind? 2, Wird der Titel korrekt angezeigt, während Sie angemeldet sind? 3, Wenn Sie nicht angemeldet sind, können Sie surfen?
Ich habe diese 3 Punkte getestet.
Ordnernamenanforderungen Es wird angefordert zu testen, ob es richtig auf die Anfrage reagiert. Wenn die Anforderung anders ist, wird daher ein Fehler von 401 oder 302 zurückgegeben. Bitte beschreiben Sie entsprechend dem Fehler, den Sie anzeigen möchten.
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