Le test du système, qui est situé dans le cadre le plus extérieur du test, est important RSpec est comme un logiciel qui effectue un test système Dans systemtest, un logiciel appelé capybara fonctionne comme si vous exécutiez une application Web, et il recherche les erreurs système dans le mouvement.
Tout d'abord, lors d'un test à l'aide d'une base de données, il n'est pas possible de parler sans données pour le test. Le flux consiste à créer des données de test avec FactoryBot, puis à tester à partir de là. Ici, voyons comment écrire des données spécifiques dans FactoryBot. Deux étapes spécifiques sont nécessaires pour exécuter le test
spec/factories/users.rb
FactoryBot.define do
factory :user do #①
name {'Utilisateur test'}
email {'[email protected]'}
password {'password'}
end
end
J'ai écrit une méthode appelée factory et y ai mis la valeur des informations utilisateur (provisoires). Ce seront les données de test. ① usine: 〇〇 do (utilisateur cette fois) Cette 〇〇 partie est le nom de cette usine et le nom utilisé lors de l'appel. En gros, utilisez le nom de la classe qui correspond à la table de données créée (la classe utilisateur correspond à la table utilisateur). Ce faisant, le nom de la classe et le nom de la méthode d'usine peuvent être combinés. Cependant, si vous voulez vraiment utiliser quelque chose avec un nom de classe et un nom de méthode différents
factory :admin_user, class: User do
Vous pouvez également dire usine: nom de l'usine, classe: nom de la classe, procédez comme ci-dessus.
Créez également des données de tâches pour les tests
spec/factories/tasks.rb
FactoryBot.define do
factory :task do
name {'Rédiger un test'}
description {'RSpec & Capybara &Préparer FactoryBot'}
user #①
end
end
① L'utilisateur ci-dessus sert à associer la tâche à l'utilisateur (écrivez ici à quel utilisateur appartient cette tâche créée)
Au dessus
Lorsque vous passez à l'écran de liste, les tâches créées s'affichent.
Écrivez un code de test et vérifiez si l'opération comme celle-ci fonctionne correctement. Vous devez d'abord écrire du code de test pour le faire fonctionner. Le code de test est
① Créer l'utilisateur A (préparation) (2) Créer une tâche dont le créateur est l'utilisateur A (préparation) ③ Connectez-vous depuis le navigateur en tant qu'utilisateur A (préparation) ④ Confirmez (exécutez) que le nom de la tâche créée par l'utilisateur A s'affiche à l'écran.
Écrivez ces quatre étapes avec le code de test
① Créer l'utilisateur A (préparation)
spec/system/tasks_spec.rb
user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
J'ai sorti une usine nommée user et utilisé cette information comme user_a. En écrivant le nom et l'e-mail attachés au verso, le contenu est modifié et des informations uniquement pour l'utilisateur A sont créées (notez que la partie inchangée telle que le mot de passe est la valeur définie lors de la création de la méthode d'usine)
② Créer une tâche dont le créateur est l'utilisateur A (préparation)
spec/system/tasks_spec.rb
FactoryBot.create(:task, name: 'Première tâche', user:user_a)
L'écriture de user: user_a signifie que cette tâche a été écrite par user_a.
③ Connectez-vous depuis le navigateur en tant qu'utilisateur A (préparation) Ouvrir une session
A. Allez à l'écran de connexion B. Entrez votre adresse e-mail C. Entrez votre mot de passe D. Appuyez sur le bouton "Connexion"
L'opération est nécessaire.
A. Vous pouvez accéder à l'écran de connexion en écrivant visit login_path (visit URL)
spec/system/tasks_spec.rb
visit login_path
B. Entrez votre adresse e-mail, C. Utilisez la méthode fill_in pour entrer votre mot de passe
spec/system/tasks_spec.rb
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
D. Utilisez la méthode click_button pour appuyer sur le bouton "Connexion"
spec/system/tasks_spec.rb
click_button's'identifier'
Pour résumer ③
spec/system/tasks_spec.rb
visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'
Ce sera comme ça.
④ Confirmez (exécutez) que le nom de la tâche créée par l'utilisateur A s'affiche à l'écran.
Pour vérifier, utilisez le style d'écriture de RSpec
expect(page).to have_content 'Première tâche'
attendre (page) .to → J'attends l'écran have_content'First task '→ S'il existe un contenu appelé première tâche Veux dire
Combinons les opérations ci-dessus en un seul code ①②③ est un code de préparation, donc avant ④ est le code pour l'exécution, alors remplissez-le en l'utilisant
spec/system/tasks_spec.rb
require 'rails_helper'
describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
describe 'Fonction d'affichage de liste' do
before do
user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
FactoryBot.create(:task, name: 'Première tâche', user:user_a)
end
context'Lorsque l'utilisateur A est connecté' do
before do
visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'
end
it'La tâche créée par l'utilisateur A s'affiche.' do
expect(page).to have_content 'Première tâche'
end
end
end
end
Présentation de PSpec
Créez un modèle dans lequel l'utilisateur B ainsi que l'utilisateur A sont connectés
spec/system/tasks_spec.rb
require 'rails_helper'
describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
describe 'Fonction d'affichage de liste' do
before do
user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
FactoryBot.create(:task, name: 'Première tâche', user:user_a)
end
context'Lorsque l'utilisateur A est connecté' do
before do
visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'
end
it'La tâche créée par l'utilisateur A s'affiche.' do
expect(page).to have_no_content 'Première tâche'
end
end
context'Lorsque l'utilisateur B est connecté' do
before do
visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'
end
it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
expect(page).to have_no_content 'Première tâche'
end
end
end
end
visit login_path fill_in'adresse e-mail ', avec:'[email protected]' fill_in'password ', avec:' password ' click_button'Connexion ' Il y en a deux, ce qui le rend difficile à comprendre. Je vais donc mettre cela ensemble.
spec/system/tasks_spec.rb
require 'rails_helper'
describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
describe 'Fonction d'affichage de liste' do
before do
user_a = FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
FactoryBot.create(:task, name: 'Première tâche', user:user_a)
visit login_path
fill_in'adresse mail', with: '[email protected]'
fill_in'mot de passe', with: 'password'
click_button's'identifier'
end
context'Lorsque l'utilisateur A est connecté' do
it'La tâche créée par l'utilisateur A s'affiche.' do
expect(page).to have_content 'Première tâche'
end
end
context'Lorsque l'utilisateur B est connecté' do
before do
FactoryBot.create(:user, name: 'Nom d'utilisateur', email:'[email protected]')
end
it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
expect(page).to have_no_content 'Première tâche'
end
end
end
end
Lorsque l'utilisateur A est connecté, exécutez la partie supérieure, et lorsque l'utilisateur B est connecté, exécutez la partie inférieure.
Les données créées avec FactoryBot peuvent être traitées comme une variable en utilisant let.
spec/system/tasks_spec.rb
require 'rails_helper'
describe 'Fonction de gestion des tâches',type:system do #Tapez pour la description la plus générale:Fixez le système
describe 'Fonction d'affichage de liste' do
let(:user_a){FactoryBot,create(:user, name:'Utilisateur A', email: '[email protected]')} #Utilisateur Aを作ったパターン
let(:user_b){FactoryBot,create(:user, name:'Utilisateur B', email: '[email protected]')} #Utilisateur Bを作ったパターン
before do
FactoryBot.create(:task, name: 'Première tâche', user:user_a)
visit login_path
fill_in'adresse mail', with: login_user.email #Je ne sais pas si je me connecte à A ou B pour pouvoir aller dans les deux sens
fill_in'mot de passe', with: login_user.password #Je ne sais pas si je me connecte à A ou B pour pouvoir aller dans les deux sens
click_button's'identifier'
end
context'Lorsque l'utilisateur A est connecté' do
let(:login_user){user_a} #Extraire les informations utilisateur A définies ci-dessus
it'La tâche créée par l'utilisateur A s'affiche.' do
expect(page).to have_content 'Première tâche'
end
end
context'Lorsque l'utilisateur B est connecté' do
let(:login_user){user_b} #Extraire les informations utilisateur B définies ci-dessus
it'Les tâches créées par l'utilisateur A ne sont pas affichées' do
expect(page).to have_no_content 'Première tâche'
end
end
end
end
Comment combiner les résultats de la même chose lors de l'exécution avec divers décrivent
#it opération partagée_example_écrire pour
shared_example_for 'La tâche créée par l'utilisateur A s'affiche.' do
it {expect(page).to have_content 'Première tâche'}
end
#it_behaves_Vous n'êtes pas obligé de l'écrire une seule fois en écrivant simplement comme
it_behaves_like 'La tâche créée par l'utilisateur A s'affiche.'
Recommended Posts