Photo by Karen Lau on Unsplash

Pisanie testów dla kodu aplikacji jest czymś, co wszyscy programiści powinni umieć robić, niezależnie od wybranego języka czy frameworka. RSpec jest niesamowitym pakietem testującym i DSL (Domain-Specific Language) zbudowanym w Ruby, który pozwala na pisanie testów jednostkowych z łatwością przy użyciu zestawu predefiniowanych metod. Moje wprowadzenie do pisania kodu w Ruby było ściśle powiązane z doświadczeniem religijnego uruchamiania RSpeca w celu przetestowania tego co napisałem; więc kiedy zacząłem uczyć się Railsów, kontynuowanie używania RSpeca było bardziej naturalnym i płynnym przejściem. Domyślnie, Railsy używają frameworka testującego MiniTest. Omówimy, jak skonfigurować nowy projekt Rails, aby używać RSpec, a następnie zbadamy użycie Capybary do testowania naszych widoków.

Po pierwsze, stworzymy nowy projekt Rails przez uruchomienie rails new NAME -T -B, gdzie NAME jest ścieżką do katalogu dla projektu, który powinien być utworzony. Flaga -T określa, że Railsy nie powinny ustawiać żadnych ram testowych dla naszego nowego projektu, co jest dokładnie tym, czego chcemy. Flaga -B instruuje Railsy by pominęły uruchomienie bundle install w tym momencie. Następnie, musimy edytować nasz Gemfile, aby zawierał następujące elementy:

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

To dodaje zarówno RSpec jak i Capybara do naszych środowisk deweloperskich i testowych. W tym momencie, uruchom bundle aby zainstalować klejnoty i wszelkie zależności, których potrzebuje projekt. Lubię wpadać do rails console w tym momencie, aby sprawdzić, czy wszystko działa, a jeśli nie – wracam do mojego Gemfile i naprawiam wszelkie problemy.

Teraz, gdy mamy już nasz szkielet projektu na miejscu, następnym krokiem jest przygotowanie naszego zestawu testowego. Po prostu uruchom rails generate rspec:install w tym momencie, aby utworzyć katalog spec i niezbędną strukturę plików. Ostatnim krokiem jest powiedzenie naszym testom, aby używały Capybary. W spec/rails_helper.rb, dodaj następującą treść:

require 'capybara/rspec'

To wszystko jeśli chodzi o konfigurację! Zanim przejdziemy dalej, zatwierdźmy zmiany, które wprowadziliśmy do naszego projektu: git add . && git commit -m "initial commit". Zajmijmy się tworzeniem kontrolera i testowaniem!

Photo by Max Nelson on Unsplash

Dla celów testowych stworzymy prosty formularz z kilkoma danymi wejściowymi, a następnie powiemy Capibarze, aby wypełniła przykładowe dane i przesłała formularz. Nie będziemy się martwić o tworzenie żadnych złożonych modeli czy persystencję informacji do bazy danych. Powiedzmy Railsom, aby stworzyły users kontroler i skonfigurowały dla nas routing:

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

Określając --no-helper --no-assets mówimy Railsom, aby nie tworzyły żadnych zasobów ani helpera dla naszego kontrolera. Opcja --no-view-specs instruuje generator, aby nie tworzył żadnych testów dla widoków – zobaczymy później jak stworzyć testy, które chcemy. Rails stworzył dla nas trasę new, którą możemy zobaczyć w config/routes.rb:

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

And in app/controllers/users_controller.rb:

class UsersController < ApplicationController
def new
end
end

Finally, Rails stworzył dla nas widok w app/views/users/new.html.erb. Wyedytujmy ten widok, aby stworzyć prosty formularz:

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

Musimy zrobić kilka rzeczy, aby zakończyć podłączanie tego. W routes.rb dodajemy następujące elementy:

post 'users' => 'users#welcome'

Musimy również dodać akcję welcome do users_controller.rb:

def welcome
@user = params
render :welcome
end

Ostatnim krokiem jest utworzenie views/users/welcome.html.erb i dodanie trochę HTML i ERB, aby wyświetlić nazwę użytkownika:

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

Phew! Jeśli uruchomimy rails server i przejdziemy do localhost:3000/users/new w naszej przeglądarce, powinniśmy zostać przywitani przez formularz z prośbą o wpisanie naszego imienia. Kiedy wpiszemy nasze imię i wciśniemy przycisk wyślij, powinniśmy zostać przekierowani na stronę witającą nas ciepłym powitaniem. Wszystko to jest dobre, ale konieczność testowania naszego kodu w ten sposób, aby upewnić się, że działa za każdym razem, gdy dodajemy nowy formularz lub implementujemy nową funkcjonalność, szybko stanie się męcząca. Na szczęście powstało narzędzie, które testuje i automatyzuje ten proces za nas!

To właśnie tutaj pojawia się Capybara. Capybara jest frameworkiem, który pozwala nam testować kod w naszych widokach poprzez wypełnianie danych w formularzach, inspekcję zawartości strony i wysyłanie żądań HTTP do przeglądarki. Skonfigurujmy specyfikację, aby przetestować nasz nowo utworzony formularz:

rails generate rspec:feature form

To wygeneruje plik spec/features/form_spec.rb. Domyślnie Capybara oczekuje, że spec znajdzie się w katalogu o nazwie features. Wyedytujmy ten plik, aby dodać nowy test, który wypełni pole tekstowe name i naciśnijmy 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

To jest to! Udało nam się stworzyć nasz pierwszy test w Railsach przy użyciu RSpec i Capybara. Jeśli uruchomimy rspec --format documentation, powinniśmy zobaczyć, że test został zaliczony. Nie krępuj się eksperymentować – jakie są sposoby na to, aby test się nie powiódł? Czy istnieją inne testy, które moglibyśmy stworzyć dla tego przykładu? Mamy nadzieję, że to tylko zarysowało powierzchnię – mamy nadzieję, że to skłoni cię do myślenia o tym, jak możesz uprościć i zautomatyzować proces testowania swojego kodu za pomocą tych narzędzi i wyrobić sobie nawyk częstego testowania swojego kodu.

Witaj tutaj, aby zobaczyć kod przedstawiony w tym poście.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.