.
@abdelpAbdel Pérez
Czasami zdarza się, że chcesz wiedzieć, jak twoje testy capybara wchodzą w interakcję z twoimi stronami, Czasami nie wystarczy log na konsoli, aby określić dlaczego nie działają zgodnie z oczekiwaniami, dlatego możesz sprawić, że będą one wyświetlały kroki w przeglądarce w czasie rzeczywistym. Kroki aby to zrobić są naprawdę proste dzięki projektowi Selenium, który jest odpowiedzialny za dostarczenie nam niezbędnej infrastruktury do interakcji z interfejsem wszystkich głównych przeglądarek internetowych.
Zacznijmy od określenia jakich narzędzi będziemy używać w tym tutorialu i ich wersji, nie jest całkowicie konieczne aby były one takie same jak Twoje, ale będzie lepiej jeśli będą:
$ lsb_release -aUbuntu 18.04.4 LTS$ rails -vRails 6.0.3.1$ ruby --versionruby 2.6.5p114 (2019–10–01 revision 67812)
Ok, teraz możemy zacząć tworzyć nasz projekt:
$ rails new myApp -T
Użyjemy opcji -T aby nie generować plików testowych ponieważ będziemy to robić ręcznie. Po tym, musimy wejść do naszego folderu projektu:
$ cd myApp
Zawsze testuję próbę uruchomienia serwera przed kontynuacją, aby upewnić się, że wszystko jest zainstalowane poprawnie, oraz sprawdzam czy żaden log błędu nie został wyświetlony na konsoli
$ rails s
Jeśli wszystko jest ok, możemy kontynuować.
Aby podążać zgodnie z podejściem TDD, najpierw musimy stworzyć nasze przypadki testowe za pomocą RSpec i Capybara, więc zacznijmy umieszczać w naszym pliku Gemfile niezbędne klejnoty w grupie rozwojowej i testowej:
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
Zauważ, że trzy punkty przed klejnotami są tylko po to, aby wskazać już dodane klejnoty w twoim projekcie.
Możemy teraz przystąpić do instalacji klejnotów (możesz również użyć bundle install, który jest taki sam):
$ bundle
Jeśli wszystko zostało zainstalowane poprawnie, teraz musimy zainstalować i skonfigurować nasze klejnoty, zacznijmy od RSpec, aby to zrobić musimy tylko uruchomić następną komendę:
$ rails g rspec:install
Nasz mały przyjaciel gryzoń Capybara jest trochę bardziej nieuchwytny. Po pierwsze, musimy umieścić w pierwszej linii naszego pliku /spec/rspec_helper.rbfile:
require 'capybara/rspec'
W naszym pliku /spec/rails_helper.rbfile:
Capybara.register_driver :selenium_chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome)endCapybara.javascript_driver = :selenium_chrome
Musimy również zmienić parametr use_transactional_fixtures na false:
config.use_transactional_fixtures = false
Tak powinien wyglądać nasz plik rails_helper.rb powinien wyglądać po zmodyfikowaniu i usunięciu komentarzy:
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
Musimy również zainstalować sterownik chromium chrome, jeśli jeszcze go nie masz. Aby zainstalować go w Ubuntu, wystarczy uruchomić:
sudo apt-get updatesudo apt-get install chromium-chromedriver
Jeśli masz inny system operacyjny, możesz zajrzeć na oficjalną stronę internetową, aby znaleźć instrukcje https://chromedriver.chromium.org/downloads.
W porządku, skoro zrobiliśmy wiele rzeczy nawet bez rozpoczęcia testu, możemy wreszcie przystąpić do pisania naszych bloków testowych. Musimy utworzyć folder o nazwie features wewnątrz naszego folderu /spec, a wewnątrz niego tworzymy nasz plik posts_spec.rb, który będzie zawierał nasz blok testowy.
/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
Pierwsza linia wymaga istnienia pliku
rails_helper
i importuje go, następnie jak opisano w dokumentacji RSpec używamy bloku RSpec.describe do enkapsulacji kodu dla naszego testu, ważne jest aby wskazać użycie konkretnego sterownika, w tym przypadku sterownika
:selenium_chrome
. Ponadto, musimy włączyć JavaScript za pomocą
js: true
, ponieważ selenium czasami ma problemy bez niego.
Nasz test jest zakończony!
Ale oczywiście, zawiedzie
ponieważ nie zaimplementowaliśmy jeszcze tej funkcjonalności w naszym projekcie. Ale nie martw się, zrobimy to teraz.
Aby przejść bezpośrednio do naszego celu, pominiemy struktury niezbędne do tworzenia postów w świecie rzeczywistym, takie jak przynależność postu do użytkownika. W naszej aplikacji posty będą tworzone anonimowo, czyli bez żadnego użytkownika jako właściciela.
Aby zaoszczędzić nam trochę minut na tworzeniu i konfigurowaniu wszystkich rusztowań niezbędnych do działania prostego modułu CRUD, użyjemy polecenia scaffold, które zrobi to wszystko za nas:
$ rails g scaffold Post title content:text
A następnie zmigrować do bazy danych:
$ rails db:migrate
Teraz możemy odwiedzić w naszej przeglądarce
localhost:3000/posts
, gdzie znajdują się wszystkie posty utworzone w naszej aplikacji.
Nie mamy jeszcze utworzonych żadnych postów, ale możemy przystąpić do tworzenia jednego z nich za pomocą naszego testu capybara po prostu uruchamiając go w ten sposób:
$ rspec spec/features/posts_spec.rb
Twoja przeglądarka zostanie otwarta, a formularz wypełniony automatycznie
Teraz, gdy nasz test przeszedł pomyślnie, możemy wreszcie świętować!
Just ostatnie ostrzeżenie: upewnij się, że dzieje się to tylko z twoimi aplikacjami ruby on rails, w przeciwnym razie to nie Capybara będzie grzebał na twoich stronach.
I to wszystko na razie ludzie. Mam nadzieję, że byłem pomocny.
Tagi
Załóż darmowe konto, aby odblokować niestandardowe doświadczenie czytelnicze.