[RUBY] Exécuter les meilleures pratiques RSpec, Brakeman, Rubocop, Rails avec overcommit

Pourquoi avez-vous décidé d'utiliser overcommit

--Je souhaite exécuter automatiquement des tests et des analyses statiques

supposition

--Rspec (automatisation des tests) --Brakeman (contrôle de sécurité) --Rubocop (analyse de code Ruby) --RailsBestPractices (analyse de code Rails)

J'écrirai en supposant que vous avez déjà installé et que vous êtes prêt à taper des commandes manuellement. Si vous disposez d'un outil que vous n'utilisez pas, ignorez les paramètres de cette partie.

introduction

Gemfile


group :development do
  gem 'overcommit'
$ bundle install
$ overcommit --install #Générer le fichier de configuration

.overcommit.yml


#Désactiver les vérifications inutiles
CommitMsg:
  ALL:
    enabled: false
PreCommit:
  AuthorEmail:
    enabled: false
  AuthorName:
    enabled: false
  BrokenSymlinks:
    enabled: false
  CaseConflicts:
    enabled: false
  MergeConflicts:
    enabled: false
#Paramètres de vérification requis
  RuboCop:
    enabled: true
  RailsBestPractices:
    enabled: true
PrePush:
  Brakeman:
    enabled: true
  RSpec:
    enabled: true
$ overcommit --sign #Refléter le changement de réglage

Paramètres par défaut est appliqué à l'exception des éléments explicitement définis dans le fichier de paramètres.

Contrôle de fonctionnement

Voici un exemple de la méthode de vérification des opérations. Rubocop Incorporez Time.now dans un contrôleur approprié et confirmez qu'il ne peut pas être validé RailsBestPractices Définissez default_scope order (created_at :: desc) sur un modèle approprié et confirmez que vous ne pouvez pas valider Brakeman Définissez `http_basic_authenticate_with nom: 'ID', mot de passe: 'mot de passe' sur le contrôleur approprié et confirmez que Push n'est pas possible. RSpec Écrivez un test qui ne passe pas et assurez-vous que vous ne pouvez pas pousser

Où j'étais accro

Lorsque j'ai exécuté RSpec manuellement, il a réussi, mais je n'ai pas pu passer la vérification pré-push et le message suivant a été affiché.

NameError:
  uninitialized constant Capybara::DSL

Lorsque vous appuyez manuellement, bin / rspec est exécuté, mais lors du pré-push, bundle exec rspec est exécuté, donc le comportement semble être légèrement différent. Résolu en ajoutant ce qui suit à spec_helper.rb.

spec/spec_helper.rb


RSpec.configure do |config|
  #Ajout des 3 lignes suivantes
  ENV['RAILS_ENV'] ||= 'test'
  require File.expand_path('../config/environment', __dir__)
  require 'rspec/rails'

référence

Recommended Posts

Exécuter les meilleures pratiques RSpec, Brakeman, Rubocop, Rails avec overcommit
[Rails] Test avec RSpec
Exécutez des tests Ruby on Rails RSpec avec des actions GitHub
Exécuter des rails à chaque fois dans le docker
[rails] Faisons un test unitaire avec Rspec!
[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Test du contrôleur avec RSpec
Exécutez SystemSpec (RSpec) et Rubocop sur CircleCI
[Ruby on Rails] Test de modèle avec RSpec
Présentation de Rspec avec Ruby on Rails x Docker
Les débutants de Rails ont essayé de se lancer avec RSpec
[Ruby / Rails] Désactiver Lint de update_all avec Rubocop