![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/images/avatars/G86ek0oGXMRu228Y7Xqp8MOLDI93.jpg)
@abdelpAbdel Pérez
![](https://hackernoon.com/social-icons/linkedin-new.png)
![](https://hackernoon.com/social-icons/twitter-new.png)
![](https://hackernoon.com/social-icons/github-new.png)
Někdy chcete vědět, jak vaše testy kapybary interagují se stránkami, někdy nestačí log na konzoli, abyste zjistili, proč nefungují podle očekávání, proto můžete zařídit, aby se kroky zobrazovaly v prohlížeči v reálném čase. Kroky k tomu jsou opravdu snadné díky projektu Selenium, který má na starosti poskytnout nám potřebnou infrastrukturu pro interakci s rozhraním všech hlavních webových prohlížečů.
Začněme tím, že si upřesníme, jaké nástroje budeme v tomto návodu používat, a příslušné verze, není zcela nutné, aby byly stejné jako ty vaše, ale bude lepší, když budou:
$ lsb_release -aUbuntu 18.04.4 LTS$ rails -vRails 6.0.3.1$ ruby --versionruby 2.6.5p114 (2019–10–01 revision 67812)
Ok, nyní můžeme začít vytvářet náš projekt:
$ rails new myApp -T
Použijeme volbu -T, abychom nemuseli generovat testovací soubory, protože to budeme dělat ručně. Poté musíme přejít do složky našeho projektu:
$ cd myApp
Před pokračováním vždy otestuji pokus o spuštění serveru, abych se ujistil, že je vše správně nainstalováno, a zkontroloval, zda se na konzoli nezobrazuje chybový protokol
$ rails s
Pokud je vše v pořádku, můžeme pokračovat.
Chceme-li dodržet přístup TDD, musíme nejprve vytvořit naše testovací případy pomocí RSpec a Capybara, takže začneme vkládat do našeho souboru Gemfile potřebné gemy ve vývojové a testovací skupině:
group :development, :test do . . . gem 'rspec-rails', '~> 4.0', '>= 4.0.1' gem 'capybara', '~> 3.32', '>= 3.32.2' gem 'selenium-webdriver', '~> 3.142', '>= 3.142.7'end
Všimněte si, že tři body před gemy slouží pouze k označení již přidaných gemů ve vašem projektu.
Můžeme nyní přistoupit k instalaci drahokamů (můžete také použít bundle install, který je stejný):
$ bundle
Pokud bylo vše správně nainstalováno, musíme nyní nainstalovat a nakonfigurovat naše drahokamy, začneme s RSpec, k tomu stačí spustit následující příkaz:
$ rails g rspec:install
Náš malý hlodavčí přítel Capybara je trochu nepolapitelnější. Nejprve musíme do našeho souboru /spec/rspec_helper.rb vložit první řádek:
require 'capybara/rspec'
V našem souboru /spec/rails_helper.rb souboru:
Capybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome)endCapybara.javascript_driver = :selenium_chrome
Také musíme změnit parametr use_transactional_fixtures na false:
config.use_transactional_fixtures = false
Takto náš rails_helper.rb soubor by měl vypadat po úpravách a odstranění komentářů:
require 'spec_helper'ENV ||= 'test'require File.expand_path('../config/environment', __dir__)abort('The Rails environment is running in production mode!') if Rails.env.production?require 'rspec/rails'require './spec/support/factory_bot'begin ActiveRecord::Migration.maintain_test_schema!rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1endCapybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome)endCapybara.javascript_driver = :selenium_chromeRSpec.configure do |config| config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = false config.infer_spec_type_from_file_location! config.filter_rails_from_backtrace!end
Musíme také nainstalovat ovladač chromium chrome, pokud ho ještě nemáte. Pro jeho instalaci v Ubuntu stačí spustit:
sudo apt-get updatesudo apt-get install chromium-chromedriver
Pokud máte jiný operační systém, můžete se podívat na oficiální webové stránky, kde najdete návod https://chromedriver.chromium.org/downloads.
Pokud jsme udělali spoustu věcí, aniž bychom ještě začali testovat, můžeme konečně přistoupit k psaní našich testovacích bloků. Musíme vytvořit složku features uvnitř naší složky /spec a v ní vytvořit náš soubor posts_spec.rb, který bude obsahovat náš testovací blok.
/spec/features/posts_spec.rb:
require 'rails_helper'RSpec.describe Post, driver: :selenium_chrome, js: true dodescribe 'the create posts process' do it 'should create a post' do visit new_post_path fill_in 'Title', with: 'Post title' fill_in 'Content', with: 'Post content' click_button 'Create Post' expect(page).to have_content 'Post was successfully created.' end endend
První řádek vyžaduje existenci souboru
rails_helper
a importuje jej, poté podle popisu v dokumentaci RSpec použijeme blok RSpec.describe k zapouzdření kódu pro svůj test, důležité je uvést použití konkrétního ovladače, v tomto případě ovladače
:selenium_chrome
. Také musíme povolit JavaScript pomocí
js: true
, protože bez něj má selenium někdy potíže.
Náš test je hotový!
![](https://hackernoon.com/images/G86ek0oGXMRu228Y7Xqp8MOLDI93-7u2p3w14.gif)
Ale samozřejmě selže
![](https://hackernoon.com/images/G86ek0oGXMRu228Y7Xqp8MOLDI93-mou43wqh.gif)
protože jsme funkci ještě neimplementovali do našeho projektu. Ale nebojte se, uděláme to teď.
Abychom šli přímo k našemu cíli, přeskočíme strukturu nutnou pro vytvoření příspěvku v reálném světě, jako je příslušnost příspěvku k uživateli. V naší aplikaci budou příspěvky vytvářeny anonymně, to znamená bez uživatele jako vlastníka.
Abychom si ušetřili několik minut vytváření a konfigurace všech potřebných lešení pro zprovoznění jednoduchého CRUD modulu, použijeme příkaz scaffold, který to všechno udělá za nás:
$ rails g scaffold Post title content:text
A pak přeneseme do databáze:
$ rails db:migrate
Nyní můžeme v prohlížeči navštívit
localhost:3000/posts
, kde jsou uvedeny všechny příspěvky vytvořené v naší aplikaci.
Nám se zatím žádný příspěvek nevytvořil, ale můžeme pokračovat v jeho vytváření pomocí našeho testu capybary, stačí ho spustit tímto:
$ rspec spec/features/posts_spec.rb
Vaš prohlížeč se otevře a formulář se automaticky vyplní
![](https://hackernoon.com/images/G86ek0oGXMRu228Y7Xqp8MOLDI93-7av13wrx.gif)
Teď, když náš test prošel, můžeme konečně slavit!
![](https://hackernoon.com/images/G86ek0oGXMRu228Y7Xqp8MOLDI93-js1223wvr.gif)
Jen upozornění na závěr: ujistěte se, že se tak děje pouze u vašich aplikací pro ruby on rails, jinak to není Capybara, kdo se vám hrabe ve webových stránkách.
A to je prozatím vše, lidi. Doufám, že jsem byl užitečný.
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/heart.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/light.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/boat.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
![](https://hackernoon.com/emojis/money.png)
Tags
Vytvořte si bezplatný účet a odemkněte si vlastní čtení.