[RUBY] Murs touchés par le premier Rspec

introduction

J'ai finalement décidé de commencer à travailler sur Rspec. Il semble que vous puissiez faire divers tests en utilisant cela. C'est incroyable. Cependant, cela semblait un peu difficile, alors j'ai décidé d'utiliser du matériel pédagogique en ligne. C'est Take off Rails.

https://freelance.cat-algorithm.com/lp/take-off-rails

Je n'ai pas eu assez de temps ces jours-ci, alors j'avais besoin de rationaliser les choses. C'est une forme de gain de temps avec de l'argent, ce qui était très bien. Les informations sont agrégées et j'ai demandé si je ne comprenais pas.

Même ainsi, j'ai eu beaucoup de problèmes, alors je vais l'écrire ici.

les rails g utilisateur du modèle -s ne peuvent pas être effectués

Cette fois, pour créer spec / models / user_spec.rb et spec / factories / users.rb pour le modèle utilisateur existant,

$ rails g model user -s

J'ai essayé de courir. Cependant, une erreur s'est produite.

$ rails g model user -s
Running via Spring preloader in process 1605
      invoke  active_record
The name 'User' is either already used in your application or reserved by Ruby on Rails. 
Please choose an alternative or use --force to skip this check and run this generator again.

Apparemment, l'option de saut n'était pas disponible. J'ai posé une question, j'ai validé tous les fichiers modifiés, puis j'ai fait $ rails g model user --force et j'ai lancé $ git restore .. En faisant cela, le même effet que le saut a été obtenu.

Erreur liée au périphérique et à l'URL d'action normale

Lorsque j'ai essayé de tester l'action de création du contrôleur utilisateur, j'ai eu l'erreur suivante.

Failures:
  1) Users POST /les utilisateurs peuvent créer des enregistrements d'utilisateurs
     Failure/Error: expect{subject }.to change { User.count }.by(1)
       expected `User.count` to have changed by 1, but was changed by 0
     # ./spec/requests/users_spec.rb:53:in `block (3 levels) in <main>'

Lorsque j'ai recherché la cause, j'ai constaté qu'elle ne passait pas à l'action user # create. Au lieu de cela, l'action #create de devise était en cours d'exécution.

Quand j'ai vérifié avec $ rails routes, les chemins du contrôleur de commande et de l'utilisateur # contrôleur étaient les mêmes. Je dois changer cela un peu.

Il a été défini comme suit.

config/routes.rb


Rails.application.routes.draw do
  root to: 'users#index'
  devise_for :users
  resources :users ,path_names: { create: 'make' } do
    resources :plants do
      resources :growth_records, shallow: true
    end
  end
  
  scope 'username' do
    resources :users, only: [:create]
  end

end

Cette fois, j'ai changé la partie de scope. Cela a éliminé les conflits de routage. Une partie du test ressemble à ceci:

RSpec.describe "Users", type: :request do
#Omission-----
  describe "POST /users" do
    subject { post('/username/users' ,params: params) }
    let(:params){ {user: attributes_for(:user)} }

    it "Peut créer des enregistrements d'utilisateurs" do
      expect{subject }.to change { User.count }.by(1)
      expect(response).to have_http_status(204)
    end
  end
#Omission-----
end

Le précédent post (users_path, params: params) a été changé en post ('/ username / users', params: params).

fin

Le monde de Rspec est profond. À l'heure actuelle, je suis seulement conscient de ne pas avoir d'erreurs, mais je veux réfléchir à "quels tests sont nécessaires et combien" par moi-même.

Après tout, la programmation est amusante.

Recommended Posts

Murs touchés par le premier Rspec
Spring Boot pour la première fois
Spring AOP pour la première fois
Introduction à Java pour la première fois # 2
Apprendre pour la première fois java [Introduction]
Développement d'Android Studio pour la première fois (pour les débutants)
J'ai essayé de toucher Docker pour la première fois
Apprentissage pour la première fois des expressions et opérateurs Java # 3
Mémo d'apprentissage lors de l'apprentissage de Java pour la première fois (mémo d'apprentissage personnel)
Comment étudier le kotlin pour la première fois ~ Partie 2 ~
Comment étudier le kotlin pour la première fois ~ Partie 1 ~
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
Modéliser Digimon avec DDD pour la première fois Partie 1
Réfléchissez lorsque Rails (turbolinks) ne charge pas la page pour la première fois
Toucher Kotlin pour la première fois-Enum Classes
[First Java] Créez quelque chose qui fonctionne avec Intellij pour le moment
L'histoire de la sortie de l'application Android sur le Play Store pour la première fois.
[Communication Socket (Java)] Impressions de la mise en œuvre de la communication Socket dans la pratique pour la première fois
Créer une application et la déployer pour la première fois avec heroku
Première programmation de ma vie Java 1st Hello World
Utilisez la méthode l pour la notation temporelle
L'histoire de l'utilisation intentionnelle de Try catch pour la première fois de ma vie
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
L'histoire d'un super débutant participant pour la première fois au concours AtCoder (AtCoder Beginner Contest 140)
Mettre en forme la date et l'heure données par created_at
Installez Amazon Corretto (préversion) pour le moment
Utilisez une bibliothèque Java externe pour le moment
Exécutez Dataflow, Java, Streaming pour le moment
[Android studio / Java] Ce que vous ne comprenez pas lorsque vous le touchez pour la première fois
Obtenez le nom d'anime de ce terme en grattant
Essayez d'exécuter Spring Cloud Config pour le moment
[Premier message] Affiche le mot Épuisé pour les produits vendus
Informations d'identification référencées par le kit AWS SDK for Java par défaut
Commande pour essayer d'utiliser Docker pour le moment
Résumé des points que les programmeurs Java trouvent glissants lorsqu'ils lisent la source Kotlin pour la première fois