ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Nous partirons du principe que cela est fait. [Ruby on Rails] Jusqu'à l'introduction de RSpec
Cliquez ici pour tester le modèle [Ruby on Rails] Test du modèle avec RSpec
Cliquez ici pour tester le contrôleur [Ruby on Rails] Test du contrôleur avec RSpec
① Créez un dossier système et un dossier usines selon les spécifications. Dans le dossier système, créez également le fichier de vue que vous souhaitez tester, Créez un modèle de données factices dans le dossier usines.
Cette fois pour tester la vue du message La structure des fichiers est la suivante.
spec/system/post_spec.rb
→ Décrivez le contenu que vous souhaitez tester.
spec/factories/post.rb
spec/factories/user.rb
→ Créez des données factices.
② Vous permet d'utiliser FactoryBot. Il est pratique de l'utiliser car vous pouvez enregistrer la base de données et créer le modèle comme user = create (: user). Créez un dossier de support et un fichier factory_bot.rb sous spec et décrivez comme suit.
spec/support/factory_bot.rb
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
end
Ajoutez ensuite ce qui suit:
spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'support/factory_bot' #<-Ajout
...
RSpec le contenu suivant.configure do |config|Ajouter à.
spec/spec_helper.rb
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
...
end
Tout d'abord, créez des données factices.
spec/factories/user.rb
FactoryBot.define do
factory :user do
email { Faker::Internet.email }
phone_number { 12345678909 }
password { 'password' }
password_confirmation { 'password' }
end
end
spec/factories/post.rb
FactoryBot.define do
factory :post do
body { Faker::Lorem.characters(number:20) }
user
end
end
Ensuite, écrivez le code de test.
spec/system/post_spec.rb
require 'rails_helper'
describe 'Post test' do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:post) { create(:post, user: user) }
let(:post2) { create(:post, user: user2) }
before do
visit new_user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
click_button 'S'identifier'
visit user_posts_path(user, post)
end
describe 'Test d'affichage' do
context 'Nouvel écran de publication' do
before do
visit new_user_post_path(user, post)
end
it 'la forme du corps est affichée' do
expect(page).to have_field 'post[body]'
end
it 'Le bouton Nouveau message s'affiche' do
expect(page).to have_button 'Nouveau poste'
end
end
end
describe 'Test d'édition' do
context 'Transition vers l'écran d'édition de votre message' do
it 'Peut faire la transition' do
visit edit_user_post_path(user, post)
expect(current_path).to eq('/users/' + user.id.to_s + '/posts/' + post.id.to_s + '/edit')
end
end
context 'Transition vers l'écran d'édition du message d'une autre personne' do
it 'Impossible de faire la transition' do
visit edit_user_post_path(user, post2)
expect(current_path).to eq('/users/' + user.id.to_s + '/posts')
end
end
end
end
Ensuite, procédez comme suit dans votre terminal:
Terminal
$ rspec spec/requests
Si vous obtenez une erreur, veuillez également essayer ceci
Terminal
$ bundle exec rspec spec/system --format documentation
Si vous réussissez le test
Finished in 3.64 seconds (files took 2.75 seconds to load)
4 examples, 0 failures
Comme il est affiché comme ceci, cela signifie que le contenu du test est correct.
[Ruby on Rails] Test du modèle avec RSpec Au contraire, s'il ne réussit pas le test, vous pouvez voir où l'erreur se produit de cette manière, donc Vous pourrez voir si le code de test est erroné, la validation est fausse, et ainsi de suite.
Failures:
1)Post-test du modèle Colonne du titre du test de validation Doit contenir 20 caractères maximum
Failure/Error: let!(:post) { build(:post) }
NoMethodError:
undefined method `build' for #<RSpec::ExampleGroups::Post::Nested::Title:0x000000000619e938>
# ./spec/models/post_spec.rb:9:in `block (3 levels) in <top (required)>'
2)Post-test du modèle Colonne du titre du test de validation Ne doit pas être vide
Failure/Error: let!(:post) { build(:post) }
NoMethodError:
undefined method `build' for #<RSpec::ExampleGroups::Post::Nested::Title:0x0000000007491518>
# ./spec/models/post_spec.rb:9:in `block (3 levels) in <top (required)>'
Finished in 0.07992 seconds (files took 2.41 seconds to load)
2 examples, 2 failures
Failed examples:
rspec ./spec/models/post_spec.rb:11 #Post-test du modèle Colonne du titre du test de validation Doit contenir 20 caractères maximum
rspec ./spec/models/post_spec.rb:15 #Post-test du modèle Colonne du titre du test de validation Ne doit pas être vide
De plus, en utilisant rspec ./spec/models/post_spec.rb:11 en bas, Vous pouvez également vérifier le contenu du test individuellement comme indiqué ci-dessous.
Terminal
$ rspec spec/models/post_spec.rb:11
Cette fois Tout d'abord, créez des données factices, Après vous être connecté sur l'écran de connexion
Parce qu'il existe également un moyen de tester javascript Si vous êtes intéressé, veuillez le vérifier.
De plus, sur Twitter, les technologies et les idées qui n'ont pas été téléchargées sur Qiita sont également téléchargées, donc Je vous serais reconnaissant si vous pouviez me suivre. Cliquez ici pour plus de détails https://twitter.com/japwork
Recommended Posts