Rails Capybara Podešavanje

Capybara je alat veb-okvira, koji se koristi za testiranje Rails aplikacija. Ovaj alat pomaže u kreiranju funkcionalnih testova, koji simuliraju interakciju korisnika sa vašom aplikacijom kroz pretraživač.

Rails Capybara Podešavanje

Capybara je alat veb-okvira, koji se koristi za testiranje Rails aplikacija. Ovaj alat pomaže u kreiranju funkcionalnih testova, koji simuliraju interakciju korisnika sa vašom aplikacijom kroz pretraživač.

Ovo je fantastičan alat za testiranje vaše aplikacije kroz pretraživač.

Capybara ne komunicira sa sajtom, već je samo sloj između vas i web driver-a. Za ovo, možete koristiti Selenium ili bilo koji drugi koji Caybara podržava.

Konfiguracija Capybara

Capybara se lako može integrisati sa redovnim testovima veb-okvira koji se koriste u Rails. Najčešće se koristi zajedno sa RSpec za pisanje, i, mada manje često, za kontrolne testove.

Pre nego što počnete, morate dodati sledeće gems u grupu testova u vašem Gemfile-u i pokrenuti bundle install:

group :test do
  gem 'capybara'
  gem 'selenium-webdriver'
end

Testiranje sa Capybara-om

Capybara ima user-friendly DSL (Domain Specific Language), koji pomaže pri izvlačenju informacija, unošenju podataka, testiranju.
Prema osnovnim podešavanjima, Capybara će locirati samo vidljive elemente. To je zato što pravi korisnik ne bi imao mogućnost da komunicira sa elementima koji nisu vidljivi. Više o tome možete pročitati na rubydoc.info

Uobičajne DSL opcije

Ovde ćemo pokriti najčešće korišćene DSL opcije za komunikaciju sa elementima u vašoj veb aplikaciji:

Find za pronalaženje određenih elemenata i njihovu manipulaciju:

find_field('field_name').value
find_field(id: 'field_id').value
find_link('link_name', visible: all).visible?
find_button('button_name').click

Ovo je jedna od važnih funkcija koju svaki dobar programer mora poznavati, ukoliko želi da manipuliše elementima. Možete ga koristiti da nađete linkove, dugmad i polja, i proveriti da li ih korisnici mogu videti ili kliknuti na njih. Find će uvek sačekati da se element pojavi na stranici, pre nego što naglasi grešku.

Komunikacija sa web aplikacijom kroz praćenje linkova i dugmića

click_link('link_id')
click_link('link_text')
click_button('button_name')
click_on('link_text') # clicks on either link or button

Uvek koristite jednu od ovih opcija da bi pristupili linku ili dugmetu. To možete postići tako što ćete koristiti id, title, text within tag ili value of the element.

Komunikaija sa form elements

fill_in('Title', :with => 'Example')
choose('radio_button')
check('checkbox')
uncheck('checkbox')
attach_file('image', 'image_path') # upload a file
select('option', from: 'select_box') # select from dropdown

Kada želite da popunite neki obrazac, trebalo bi da koristite neku od ovih mogućnosti. U zavisnosti od tipa elementa, moguće vrednosti su: id, name ili sličan element. Jedini izuzetak je attach_file, jer može prihvatiti samo id i name.

Navigacija kroz stranice sa:

visit('url_name')

Lako možete prolaziti kroz stranice sa ovom jednostavnom komandom ili samo pristupiti trenutnoj stranici sa:

expect(page).to have_current_path(path_name)

Query je stranica za postojanje određenih elemenata:

expect(page).to have_selector('table tr')
expect(page).to have_content('content_name')

Ograničite određene radnje u određenim delovima stranice sa scoping:

# within(:xpath, 'actual_xpath') do
  fill_in 'Title', with: 'Example'
end

Koristite within metod kada želite da koristite radnje samo u određenim delovima ili koristite ove posebne metode within_filedset za određeni broj polja i within_table za određenu tabelu.

Debug primenite uz pomoć sledećih metoda:

save_and_open_page # current snapshot of the page
save_sceenshot('screenshot_name.png')
save_and_open_screenshot # saves and automatically opens the screenshot

Kada želite da sačuvate fotografiju vaše stranice, samo dodajte ove linije vašem kodu, ili možete preuzeti trenutno stanje elementa sa:

print page_name.html

Podudaranja (Matchers)

Prilikom pronalaženja elemenata uz pomoć DSL ili XPath, obično se nađe dva ili više podudaranja. Možete prilagoditi kako Capybara pronalazi elemente koristeći:

  • Capybara.exact - pronalazi identična podudaranja jednog elementa
  • Capybara.match - kontroliše kako se Capybara ponaša kada se više elemenata podudara

Da bi se izbegla greška Ambigous match kada se nađe više od jednog podudaranja, možete koristiti neke od sledećih strategija koje podržava Capybara:

  • :first - izabraće prvi element koji se podudara
  • :one - naglašavaće grešku ako se podudara sa više elemenata
  • :prefer_exact - pronalazi sve elemente koji se podudaraju, ali se vraća samo prvi a ostali se odbacuju
  • :smart - ako je Capybara.exact podešena na true, ponašaće se kao one. U suprotnom, pokušaće da pronađe potpuno podudaranje. Opet se naglašava greška ako se nađe više elemenata. Ako se ne pronađe ni jedan element, obavlja se nova pretraga.

JavaScript i Asynchronous

Asynchronous JavaScript omogućava vam da komunicirate sa elementom na stranici koji još nije prisutan. Ovo se može dogoditi prilikom korišćenja JavaScript-a za kreiranje novog elementa na stranici:

click_link('test')
click_link('foo')

Kada kliknete na test link, započeće se asinhroni proces, koji će prikazati foo link. Klikom na foo ćete najverovatnije dobiti grešku kao povratnu informaciju, jer taj link još ne postoji.

Capybara to može rešiti tako što će kratko sačekati. Ovaj period čekanja možete prilagoditi na Capybara.default_max_wait_time.

Capybara i RSpec

Korišćenje Capybara-e sa RSpec-om je jednostavno kao i dodavanje require 'capybara/rails' u rspec_helper.rb fajl. Da bi ste mogli ovo uraditi, treba će vam instalirani RSpec.

describe 'users' do
  let! :each do
    @user = FactoryGirl.create(:user)
    login_as(@user)
  end

  describe GET user#edit' do
    it 'should update user' do
      visit edit_user_path(@user)
      within('#edit_user_path') do
        fill_in 'email', with: 'john@example.com'
      end
      click_button 'Save'
      find_button('Save').click
      expect(page).to have_content 'Success'
    end
  end
end

Ovo je bio jednostavan primer koji pokazuje da možete koristiti Capybara-u i RSpec u isto vreme.

Nadam se da vam je ovaj članak pomogao da razumete kako Capybara može testiranju!

Podpišite se i pratite naš blog za sledeće članke!