Foto: Karen Lau on Unsplash

Psaní testů aplikačního kódu by měli znát všichni programátoři bez ohledu na zvolený jazyk nebo framework. RSpec je neuvěřitelná testovací sada a jazyk DSL (Domain-Specific Language) vytvořený v jazyce Ruby, který umožňuje snadné psaní jednotkových testů pomocí sady předdefinovaných metod. Můj úvod do psaní kódu v jazyce Ruby byl úzce spjat se zkušeností s náboženským spouštěním nástroje RSpec k testování toho, co jsem napsal; a tak když jsem se začal učit Rails, bylo pokračování v používání nástroje RSpec přirozenějším a bezproblémovějším přechodem. Ve výchozím nastavení používá Rails testovací framework MiniTest. Probereme, jak nastavit nový projekt Rails tak, aby používal RSpec, a poté prozkoumáme použití Capybary k testování našich pohledů.

Nejprve vytvoříme nový projekt Rails příkazem rails new NAME -T -B, kde NAME je cesta k adresáři projektu, který má být vytvořen. Příznak -T určuje, že Rails nemá pro náš nový projekt nastavit žádný testovací rámec, což je přesně to, co chceme. Příznak -B dává Rails pokyn, aby v tomto okamžiku vynechal spuštění příznaku bundle install. Dále musíme upravit náš soubor Gemfile tak, aby obsahoval následující:

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

Tím se do našeho vývojového a testovacího prostředí přidá RSpec i Capybara. V tomto okamžiku spusťte bundle pro instalaci gemů a všech závislostí, které projekt potřebuje. Rád se v tomto okamžiku vrhnu do rails console, abych zkontroloval, zda vše funguje, a pokud ne – vrátím se k souboru gemů a opravím případné problémy.

Teď, když máme kostru projektu, je dalším krokem sestavení naší testovací sady. V tomto okamžiku stačí spustit rails generate rspec:install, aby se vytvořil adresář spec a potřebná struktura souborů. Posledním krokem je říci našim testům, aby používaly Capybaru. Do adresáře spec/rails_helper.rb přidejte následující:

require 'capybara/rspec'

To je pro nastavení vše! Než budeme pokračovat dál, odepišme změny, které jsme v našem projektu provedli: git add . && git commit -m "initial commit". Ponořme se do vytvoření kontroléru a proveďme nějaké testování!

Foto: Max Nelson on Unsplash

Pro účely našeho testování vytvoříme jednoduchý formulář s několika vstupy a poté řekneme Capybaře, aby vyplnila nějaká ukázková data a formulář odeslala. Nebudeme se starat o vytváření žádných složitých modelů ani o persistenci informací do databáze. Řekneme systému Rails, aby vytvořil kontrolér users a nastavil pro nás nějaké směrování:

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

Zadáním --no-helper --no-assets říkáme systému Rails, aby pro náš kontrolér nevytvářel žádné prostředky ani pomocníka. Volba --no-view-specs dává generátoru pokyn, aby nevytvářel žádné testy pro pohledy – později uvidíme, jak vytvořit požadované testy. Rails pro nás vytvořil trasu new, kterou můžeme vidět v config/routes.rb:

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

A v app/controllers/users_controller.rb:

class UsersController < ApplicationController
def new
end
end

Nakonec pro nás Rails vytvořil pohled v app/views/users/new.html.erb. Upravíme tento pohled a vytvoříme jednoduchý formulář:

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

Potřebujeme udělat několik věcí, abychom dokončili zapojení. Do routes.rb přidáme následující:

post 'users' => 'users#welcome'

Musíme také přidat akci welcome do users_controller.rb:

def welcome
@user = params
render :welcome
end

Závěrečným krokem je zde vytvoření views/users/welcome.html.erb a zahrnutí některých HTML a ERB pro zobrazení jména uživatele:

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

Uf! Pokud spustíme rails server a přejdeme na localhost:3000/users/new v našem prohlížeči, měl by nás přivítat formulář s žádostí o zadání jména. Když zadáme své jméno a stiskneme tlačítko odeslat, měli bychom být přesměrováni na stránku, která nás srdečně přivítá. To je všechno dobré a správné, ale nutnost testovat náš kód tímto způsobem, abychom se ujistili, že funguje pokaždé, když přidáme nový formulář nebo implementujeme novou funkci, se brzy stane únavnou. Naštěstí byl vytvořen nástroj, který tento proces testuje a automatizuje za nás!

Tady přichází na řadu Capybara. Capybara je framework, který nám umožňuje testovat kód v našich pohledech vyplňováním údajů do formuláře, kontrolou obsahu stránky a odesíláním požadavků HTTP do prohlížeče. Nastavíme specifikaci pro testování našeho nově vytvořeného formuláře:

rails generate rspec:feature form

Tím se vygeneruje soubor spec/features/form_spec.rb. Ve výchozím nastavení Capybara očekává, že specifikace najde v adresáři s názvem features. Upravíme tento soubor a přidáme nový test, který vyplní vstupní textové pole name a stiskne tlačítko odeslat:

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 je vše! Úspěšně jsme vytvořili náš první test v systému Rails pomocí RSpec a Capybara. Pokud spustíme rspec --format documentation, měli bychom vidět, že test prošel. Nebojte se experimentovat – jaké jsou způsoby, aby test selhal? Existují další testy, které bychom mohli pro tento příklad vytvořit? Zde jsme jen poškrábali povrch – doufejme, že vás to přiměje přemýšlet o tom, jak můžete zjednodušit a automatizovat proces testování svého kódu pomocí těchto nástrojů a zvyknout si často testovat svůj kód.

Kód prezentovaný v tomto příspěvku najdete zde.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.