Fotografie de Karen Lau pe Unsplash

Scrierea de teste pentru codul aplicației este ceva ce toți programatorii ar trebui să fie familiarizați să facă, indiferent de limbajul sau framework-ul ales. RSpec este o suită de testare incredibilă și un DSL (Domain-Specific Language) construit în Ruby, care vă permite să scrieți teste unitare cu ușurință folosind un set de metode predefinite. Inițierea mea în scrierea de cod în Ruby a fost strâns legată de experiența de a rula religios RSpec pentru a testa ceea ce scrisesem; și astfel, când am început să învăț Rails, continuarea utilizării RSpec a făcut ca tranziția să fie mai naturală și mai transparentă. În mod implicit, Rails utilizează cadrul de testare MiniTest. Vom discuta despre cum să configurăm un nou proiect Rails pentru a utiliza RSpec și apoi vom explora utilizarea Capybara pentru a testa vizualizările noastre.

În primul rând, vom crea un nou proiect Rails prin rularea rails new NAME -T -B, unde NUME este calea către directorul pentru proiectul care trebuie creat. Stegulețul -T specifică faptul că Rails nu ar trebui să configureze niciun cadru de testare pentru noul nostru proiect, ceea ce este exact ceea ce ne dorim. Stegulețul -B îi ordonă lui Rails să sară peste rularea bundle install în acest moment. În continuare, trebuie să edităm fișierul nostru Gemfile pentru a include următoarele:

group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end

Acest lucru adaugă atât RSpec cât și Capybara la mediile noastre de dezvoltare și testare. În acest moment, rulați bundle pentru a instala gems și toate dependențele de care are nevoie proiectul. Îmi place să intru în rails console în acest moment doar pentru a verifica dacă totul funcționează, iar dacă nu – mă întorc la fișierul meu Gemfile și rezolv orice problemă.

Acum că avem scheletul proiectului nostru, următorul pas este să ne montăm suita de testare. Pur și simplu rulați rails generate rspec:install în acest punct pentru a crea directorul spec și structura de fișiere necesară. Ultimul pas este de a spune testelor noastre să folosească Capybara. În spec/rails_helper.rb, adăugați următoarele:

require 'capybara/rspec'

Acesta este tot pentru configurare! Înainte de a merge mai departe, haideți să validăm modificările pe care le-am făcut în proiectul nostru: git add . && git commit -m "initial commit". Să ne aruncăm în crearea unui controler și să facem niște teste!

Fotografie de Max Nelson pe Unsplash

În scopul testelor noastre, vom crea un formular simplu cu câteva intrări, apoi îi vom spune lui Capybara să completeze câteva date de probă și să trimită formularul. Nu ne vom preocupa de crearea unor modele complexe sau de persistența informațiilor într-o bază de date. Să-i spunem lui Rails să creeze un controler users și să configureze niște rute pentru noi:

rails generate controller Users new --no-helper --no-assets --no-view-specs

Prin specificarea --no-helper --no-assets îi spunem lui Rails să nu creeze niciun activ sau un helper pentru controlerul nostru. Opțiunea --no-view-specs îi ordonă generatorului să nu creeze niciun test pentru vizualizări – vom vedea mai târziu cum să creăm testele pe care le dorim. Rails a creat o rută new pentru noi, pe care o putem vedea în config/routes.rb:

Rails.application.routes.draw do
get 'users/new'
end

Și în app/controllers/users_controller.rb:

class UsersController < ApplicationController
def new
end
end

În cele din urmă, Rails a creat o vedere pentru noi în app/views/users/new.html.erb. Haideți să modificăm această vizualizare pentru a crea un formular simplu:

<h1>User Login</h1>
<%= form_tag users_path do %>
<%= label_tag :name %>
<%= text_field_tag :name %>
<%= submit_tag "submit" %>
<% end %>

Trebuie să facem câteva lucruri pentru a termina de cablat acest lucru. În routes.rb adăugați următoarele:

post 'users' => 'users#welcome'

De asemenea, trebuie să adăugăm o acțiune welcome la users_controller.rb:

def welcome
@user = params
render :welcome
end

Pasul final aici este crearea lui views/users/welcome.html.erb și includerea unor elemente HTML și ERB pentru a afișa numele utilizatorului:

<h1><%= "Welcome, #{@user}!" %></h1>

Uf! Dacă rulăm rails server și mergem la localhost:3000/users/new în browserul nostru, ar trebui să fim întâmpinați de un formular care ne cere să introducem numele nostru. Când introducem numele nostru și apăsăm butonul de trimitere, ar trebui să fim redirecționați către o pagină care ne întâmpină cu un călduros bun venit. Toate acestea sunt bune și frumoase, dar faptul că trebuie să ne testăm codul în acest mod pentru a ne asigura că funcționează de fiecare dată când adăugăm un nou formular sau implementăm o nouă funcție va deveni în curând obositor. Din fericire, a fost creat un instrument care să testeze și să automatizeze acest proces pentru noi!

Aici intervine Capybara. Capybara este un framework care ne permite să testăm codul din vizualizările noastre prin completarea datelor din formulare, inspectarea conținutului paginii și trimiterea de cereri HTTP către browser. Să configurăm o specificație pentru a testa formularul nostru nou creat:

rails generate rspec:feature form

Acest lucru va genera fișierul spec/features/form_spec.rb. În mod implicit, Capybara se așteaptă să găsească specs într-un director numit features. Să edităm acest fișier pentru a adăuga un nou test, care va completa intrarea din câmpul de text name și va apăsa submit:

require 'rails_helper'RSpec.feature "Forms", type: :feature do
it 'can enter a name and receive a greeting' do
visit 'users/new'
fill_in :name, with: "Capybara"
click_on 'submit'
expect(page).to have_content "Welcome, Capybara!"
end
end

Așa este! Am creat cu succes primul nostru test în Rails folosind RSpec și Capybara. Dacă rulăm rspec --format documentation, ar trebui să vedem că testul trece. Simțiți-vă liberi să experimentați – care sunt modalități de a face testul să eșueze? Există și alte teste pe care am putea să le creăm pentru acest exemplu? Am zgâriat doar suprafața aici – sperăm că acest lucru vă face să vă gândiți la modul în care puteți simplifica și automatiza procesul de testare a codului dvs. folosind aceste instrumente, și să vă obișnuiți să vă testați des codul.

Vizitați aici pentru codul prezentat în acest post.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.