Verwendung von Gem bei der Entwicklung des Rails-API-Servers (Rack-Cors, Rspec-Rails, Factory_bot_rails, Rubocop)

Annahme

Erstellen einer Rails-API-Serverumgebung mit Docker-Compose Ich habe Gem in diesem Artikel nicht viel erwähnt, also fahren Sie fort

Gemfile bearbeiten

Installieren Sie den folgenden Edelstein.

...
gem 'rack-cors'

group :development, :test do
...
  gem 'rspec-rails', '~> 3.9'
  gem 'factory_bot_rails'
end

group :development do
...
  gem 'rubocop', require: false
end

rack-cors Erforderlich bei Verwendung eines Postboten. Wenn Sie dies nicht tun, tritt ein CORS-Problem auf und ein Fehler tritt auf.

config > initializers > cors.rb Wenn Sie wie folgt schreiben, können Sie die API von überall aus aufrufen.

cors.rb


Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
             headers: :any,
             methods: %i[get post put patch delete options head]
  end
end

rspec-rails, factory_bot_rails Es gibt eine Datei, die automatisch generiert wird, wenn Sie ein Modell oder einen Controller generieren. Es ist daher besser, sie im Voraus zu platzieren.

rspec-rails GitHub Rails 5 verwendet das System rspec-Rails 3. (4 ~ in Schienen 6)

Nach der Bundler-Installation die erste Datei unten? Installation

rails generate rspec:install
…
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

Außerdem wurde Folgendes zu .rspec und application.rb hinzugefügt

Siehe Verfahren zum Installieren von Rspec und Factory_bot in der Rails-App

.rspec:.rspec


--color
--require rails_helper
--format documentation

application.rb


    config.generators do |g|
      g.test_framework :rspec,
                       view_specs: false,
                       helper_specs: false,
                       controller_specs: false,
                       routing_specs: false

Modelltests wurden automatisch generiert, Der Integrationstest wurde manuell zum Schreiben in Anforderungsspezifikation erstellt.

spec > requests > hoge_api_spec.rb Ich habe es so genannt.

Die Anforderungsspezifikation wurde mit der folgenden Konfiguration geschrieben

hoge_spec.rb


RSpec.describe 'HogeAPI' do
  describe 'POST #create' do #Aktionsnamen anzeigen
    context 'Wenn xxx' do #Bedingungen
      before do
        #Dummy-Daten vorbereiten
        FactoryBot.create(:hoge)
        ...
      end

      it 'yy' do
        expect do #Beim Erkennen einer Änderung in der DB
          post '/hoge/create', params: { name: "Hoge" }
        end.to change(Hoge, :count).by(+1) and change(Table2, :count).by(0)
        expect(response.status).to eq(201) #Überprüfen Sie den Statuscode
      end
    end

Referenz

[Rspec] Grundlagen des Rails-Modelltests [Rails] So schreiben Sie einen API-Test API mit RSpec testen Erstellen von Testdaten mit dem FactoryBot in Rails-Projekt

Wie schreibe ich application.rb das war nutzlos

Da die Generatoren in application.rb einfach keine Controller-Testdatei generieren möchten, um einen Controller zu generieren, Siehe Everyday Rails-Einführung in den Rails-Test mit RSpec

application.rb


# NG
    config.generators do |g|
      g.test_framework :rspec,
                       controller_specs: false

Zuerst habe ich geschrieben, aber die Controller-Generierung war wie erwartet, aber aus irgendeinem Grund konnte die Modelltestdatei aufgrund eines Fehlers nicht generiert werden.

rubocop Da Rubocop auch beim Formatieren mit VS Code verwendet wird, habe ich es lokal installiert.

Es wird überprüft, ob die Datei korrekt geschrieben wurde.

//Wenn Sie überprüfen möchten
rubocop

//Wenn Sie es automatisch überprüfen und beheben können
rubocop -a

Es ist eine sehr Warnung. Überprüfen Sie daher den Inhalt der Warnung und setzen Sie sie so, dass sie überspringt, wenn sie nicht erforderlich ist.

Beispiel

.yml:.rubocop.yml


AllCops:
    Exclude: #Geben Sie unter Ausschließen die Dateien an, die Sie ausschließen möchten.
      - 'spec/*.rb'
      - 'db/schema.rb'
      - 'test/*'
      - 'config/**/*'
      - 'Gemfile'
      - 'bin/*'


Style/FrozenStringLiteralComment:
    Enabled: false

Style/Documentation:
    Enabled: false

Style/StringLiterals:
    Enabled: false

Metrics/BlockLength:
    Exclude:
        - 'spec/**/*'

Metrics/MethodLength:
    Max: 30

Metrics/AbcSize:
    Max: 30

Style/AsciiComments:
    Enabled: false

AllCops ist eine Einstellung, die allen Warnungen gemeinsam ist

Referenz

CORS für API in Rails festlegen Verwenden wir RuboCop mit Rails-Option und Lint-Option

Recommended Posts

Verwendung von Gem bei der Entwicklung des Rails-API-Servers (Rack-Cors, Rspec-Rails, Factory_bot_rails, Rubocop)
[Rails] Wie man Edelstein "devise" benutzt
[Rails] So vermeiden Sie "Verwenden Sie die Syntax von Hash-Raketen", wenn Sie Rubocop ausführen
Verwendung der Ketten-API
[Rails] Verwendung von Enum
[Rails] Verwendung von Enum
Verwendung von Rails Join
So beenden Sie den Rails-Server
[Rails] Verwendung der Validierung
[Rails] So verwenden Sie authenticate_user!
[Schienen] Verwendung von Scope
[Rails 5] Verwendung von gem gon ~ Übergabe von Variablen von Rails an JS ~
[Schienen] Verwendung von Geräten (Hinweis)
[Rails] Verwendung von Flash-Nachrichten
Verwendung von Ruby on Rails
[Rails] Verwendung von Active Storage
[Einführung in Rails] Verwendung von Render
[Rails] Verwendung von ActiveRecord :: Bitemporal (BiTemporalDataModel)
[Schienen] Verwendung der Kartenmethode
Verwendung von MySQL im Rails-Tutorial
So beheben Sie Fehler, die während der Installation von Rails 5.1.3 auftreten
[Ruby on Rails] Verwendung von redirect_to
[Hinweis] Verwendung von Rails 6 Devise + Cancancan
[Rails] Verwendung von video_tag zum Anzeigen von Videos
[Rails] Verwendung der Hilfsmethode, Confimartion
Verwendung von credentials.yml.enc aus Rails 5.2
[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung von Schienen g Gerüst, Funktionen, Vorsichtsmaßnahmen
Verwendung der Java-API mit Lambda-Ausdrücken
Verwendung von JQuery in Rails 6 js.erb
So erstellen Sie eine API mit GraphQL und Rails
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
[Rails] So verwenden Sie die Hilfsmethode von devise before_action: authenticate_user!
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection