Comment utiliser Gem inclus lors du développement du serveur API Rails (rack-cors, rspec-rails, factory_bot_rails, rubocop)

supposition

Création d'un environnement de serveur API Rails à l'aide de docker-compose Je n'ai pas beaucoup mentionné Gem dans cet article, alors continuez

Édition de Gemfile

Installez la gemme suivante.

...
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 Requis lors de l'utilisation du facteur. Si vous ne le faites pas, un problème CORS se produira et une erreur se produira.

config > initializers > cors.rb Si vous écrivez comme suit, vous pouvez accéder à l'API de n'importe où.

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 Il existe un fichier qui est généré automatiquement lorsque vous générez un modèle ou un contrôleur, il est donc préférable de le mettre à l'avance.

rspec-rails GitHub Rails 5 utilise le système rspec-rails 3. (4 ~ dans les rails 6)

Après l'installation du bundler, le fichier initial ci-dessous? Installation

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

Ajout des éléments suivants à .rspec et application.rb

Voir Procédure d'installation de Rspec et Factory_bot dans l'application Rails

.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

Les tests de modèles ont été générés automatiquement, Le test d'intégration a été créé manuellement pour être écrit dans Request spec.

spec > requests > hoge_api_spec.rb Je l'ai nommé comme ça.

La spécification de la demande a été écrite avec la configuration suivante

hoge_spec.rb


RSpec.describe 'HogeAPI' do
  describe 'POST #create' do #Afficher le nom de l'action
    context 'Si xxx' do #conditions
      before do
        #Préparer des données factices
        FactoryBot.create(:hoge)
        ...
      end

      it 'yy' do
        expect do #Lors de la détection d'un changement de 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) #Vérifiez le code d'état
      end
    end

référence

[Rspec] Principes de base du test du modèle Rails [Rails] Comment écrire un test d'API Test de l'API à l'aide de RSpec Comment créer des données de test à l'aide du projet FactoryBot in Rails

Comment écrire application.rb qui était inutile

Étant donné que les générateurs de application.rb ne veulent tout simplement pas générer un fichier de test de contrôleur pour générer un contrôleur, Reportez-vous à Everyday Rails-Introduction to Rails Test with RSpec

application.rb


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

Au début, j'ai écrit, mais la génération du contrôleur était comme prévu, mais pour une raison quelconque, le fichier de test du modèle n'a pas pu être généré en raison d'une erreur.

rubocop Puisque rubocop est également utilisé lors du formatage avec VS Code, je l'ai installé localement.

Il vérifiera si le fichier est écrit correctement.

//Quand vous voulez vérifier
rubocop

//Quand vous pouvez le vérifier et le réparer automatiquement
rubocop -a

C'est un très avertissement, alors vérifiez le contenu de l'avertissement et configurez-le pour ignorer s'il n'est pas nécessaire.

Exemple

.yml:.rubocop.yml


AllCops:
    Exclude: #Spécifiez les fichiers que vous souhaitez exclure dans Exclure.
      - '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 est un paramètre commun à tous les avertissements

référence

Définir CORS pour l'API dans Rails Utilisons RuboCop avec l'option Rails et l'option Lint

Recommended Posts

Comment utiliser Gem inclus lors du développement du serveur API Rails (rack-cors, rspec-rails, factory_bot_rails, rubocop)
[Rails] Comment utiliser la "devise" des gemmes
[Rails] Comment éviter "Utiliser la syntaxe des fusées de hachage" lors de l'exécution de Rubocop
Comment utiliser l'API Chain
[Rails] Comment utiliser enum
[Rails] Comment utiliser enum
Comment utiliser la jonction de rails
Comment terminer le serveur de rails
[Rails] Comment utiliser la validation
[Rails] Comment utiliser authenticate_user!
[Rails] Comment utiliser Scope
[Rails 5] Comment utiliser gem gon ~ Comment passer des variables de Rails à JS ~
[Rails] Comment utiliser l'appareil (Remarque)
[Rails] Comment utiliser les messages flash
Comment utiliser Ruby on Rails
[Rails] Comment utiliser Active Storage
[Introduction aux rails] Comment utiliser le rendu
[Rails] Comment utiliser ActiveRecord :: Bitemporal (BiTemporalDataModel)
[Rails] Comment utiliser la méthode de la carte
Comment utiliser MySQL dans le didacticiel Rails
Comment résoudre les erreurs qui se produisent lors de l'installation de Rails 5.1.3
[Ruby on Rails] Comment utiliser redirect_to
[Note] Comment utiliser Rails 6 Devise + cancancan
[Rails] Comment utiliser video_tag pour afficher des vidéos
[Rails] Comment utiliser la méthode d'assistance, confimartion
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
[Rails] Comment écrire lors de la création d'une sous-requête
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment utiliser les rails g échafaudage, fonctions, précautions
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser JQuery dans Rails 6 js.erb
Comment créer une API avec GraphQL et Rails
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
[rails] Comment utiliser la méthode d'assistance de devise before_action: authenticate_user!
[Rails] Je ne sais pas comment utiliser le modèle ...
Résumé de l'API de communication Java (1) Comment utiliser Socket
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection