J'écrirai sur les tests de Rails. Il s'agit d'un test unitaire du modèle utilisant RSpec. L'essentiel est de vérifier si la validation fonctionne bien.
Tout d'abord, installez la gemme. Modifiez le Gemfile et installez le bundle.
Gemfile
group :development, :test do
gem 'rspec-rails'
end
# web-Si la gemme appelée console se trouve dans l'environnement de test, déplacez-la uniquement vers le développement
group :development do
gem 'web-console'
end
Terminal
$ bundle install
Ensuite, préparez un fichier pour rspec.
Terminal
$ rails g rspec:install
Je pense que vous avez ajouté quelques fichiers.
Ajoutez ce qui suit au .rspec du fichier ajouté.
.rspec
--format documentation
Ensuite, préparez les répertoires nécessaires.
Créez un répertoire spec / models
Ensuite, créez un fichier pour écrire le code de test dans le répertoire models.
Cette fois, nous allons créer post_spec.rb
.
Nommons le fichier model name_spec.rb
.
Maintenant, vous êtes prêt à partir.
Écrivons le code de test.
spec/models/post_spec.rb
require 'rails_helper' # rails_Requis pour utiliser helper. Veuillez écrire sans réfléchir
describe Post do #À propos du modèle de poste
describe '#create' do #À propos de l'action de création
it "Impossible de s'inscrire s'il n'y a pas de contenu" do #Décrivez le contenu de confirmation du test
post = Post.new(content: "") #Créer une instance (données) du modèle Post
post.valid? #Lors de l'enregistrement d'une instance, assurez-vous qu'elle ne peut pas être enregistrée en raison de la validation.
expect(post.errors[:content]).to include("can't be blank") #Dans la déclaration d'erreur"can't be blank"Déterminer si est inclus
end
end
end
Chaque processus est comme je l'ai écrit dans le commentaire, mais si vous le vérifiez un par un sur la console, vous pouvez le comprendre un peu plus, alors essayons-le! Lançons l'écran de la console dans le terminal.
Terminal
$ rails c
Essayez d'exécuter le code de test «it ~ end» dans l'ordre.
[1] Ici, une instance du modèle Post (colonne de contenu vide) est créée. [2] Si l'instance créée ci-dessus ne parvient pas à enregistrer, false sera retourné. Pour plus d'informations sur les méthodes valides et non valides, veuillez consulter [ici](https://railsguides.jp/active_record_validations.html#valid-questionmark% E3% 81% A8 invalid-questionmark). [3] La déclaration d'erreur peut être visualisée en utilisant la méthode des erreurs. Je reçois un message d'erreur à l'adresse `@ message`. Cette fois, en plus de la validation qui n'autorise pas d'espace vide, le modèle Post a également une validation d'au moins 2 caractères, donc ces deux erreurs se produisent.Le modèle Post utilisé dans l'exemple ci-dessus comportait peu de colonnes et il était facile de créer des données de test. Cependant, avec un modèle utilisateur qui contient plusieurs éléments d'information tels que le nom, l'adresse e-mail et le mot de passe, il est difficile d'écrire les données une par une.
user = User.new(name: "hoge", email: "[email protected]", password: "xxxxxx")
Vous devez l'écrire de cette façon, ce qui entraîne un code redondant.
Si vous utilisez une gemme appelée ** FactoryBot **, vous pouvez préparer les données par défaut et modifier les données uniquement là où vous en avez besoin, ce qui est pratique. J'écrirai la méthode d'introduction et l'utilisation dans l'ordre.
Insérez d'abord la gemme.
Gemfile
group :development, :test do
#réduction
gem 'factory_bot_rails'
end
Terminal
$ bundle install
Créez un répertoire spec / factories
.
Ensuite, créez un fichier pour écrire les données dans le répertoire des usines.
Cette fois, je vais créer ʻusers.rb. Appelons le fichier
nom du modèle au pluriel .rb`.
La façon d'écrire est la suivante.
spec/factories/users.rb
FactoryBot.define do
factory :user do
nickname {"neko"}
email {"[email protected]"}
password {"nyannyan"}
password_confirmation {"nyannyan"}
profile {"hello"}
end
end
Vous pouvez facilement créer une instance avec un fichier de spécification en utilisant factory_bot.
user_spec.rb
user = FactoryBot.create(:user)
Écrivez simplement et cela créera une instance préparée dans users.rb.
En fait, c'est un peu plus facile à écrire, alors définissons-le également.
Omission de la notation factory_bot Ajoutez ce qui suit à rails_helper.
rails_helper.rb
RSpec.configure do |config|
#Ajoutez ce qui suit
config.include FactoryBot::Syntax::Methods
# (réduction)
end
Utilisons ceci pour écrire un test pour le modèle User, par exemple.
user_spec.rb
require 'rails_helper'
describe User do
describe '#create' do
it "Impossible de s'inscrire sans pseudo" do
user = build(:user, nickname: "")
user.valid?
expect(user.errors[:nickname]).to include("Entrez s'il vous plait")
end
it "Impossible de s'inscrire sans e-mail" do
user = build(:user, email: "")
user.valid?
expect(user.errors[:email]).to include("Entrez s'il vous plait")
end
end
end
Vous pouvez créer une instance en faisant build (: nom du modèle)
comme ceci.
Si vous souhaitez utiliser une valeur différente de la valeur préparée par factory_bot, comme des données vides, vous pouvez utiliser build (: nom du modèle, nom de la colonne: valeur)
.
Tout ce que vous avez à faire est d'entrer une commande depuis le terminal pour exécuter le test.
Terminal
$ bundle exec rspec
Si le test réussit, il sera affiché comme ceci.
En cas d'échec, le nombre de feilures est compté par le nombre de tests qui n'ont pas réussi, et le contenu de l'erreur est affiché.
La commande bundle exec rspec
écrite ci-dessus exécutera tout le fichier de spécification, donc si vous avez déjà un test vérifié, ce sera un peu inutile.
Terminal
$ bundle exec rspec spec/Nom du répertoire/nom de fichier(_spec.rb)
Vous pouvez spécifier le fichier et l'exécuter par. En prenant le test du modèle utilisateur utilisé cette fois à titre d'exemple, il se présente comme suit.
Terminal
$ bundle exec rspec spec/models/user_spec.rb
Recommended Posts