Az alkalmazáskód tesztelését minden programozónak meg kell ismernie, függetlenül a választott nyelvtől vagy keretrendszertől. Az RSpec egy hihetetlen tesztcsomag és DSL (Domain-specifikus nyelv), amely Ruby-ra épül, és amely lehetővé teszi, hogy előre definiált módszerek segítségével könnyedén írjunk egységteszteket. A Ruby-ban történő kódírásba való bevezetésem szorosan összefonódott az RSpec vallásos futtatásának tapasztalatával, hogy teszteljem, amit írtam; és így amikor elkezdtem tanulni a Rails-t, az RSpec további használata természetesebb és zökkenőmentesebb átmenetet jelentett. A Rails alapértelmezés szerint a MiniTest tesztelési keretrendszert használja. Megbeszéljük, hogyan állíthatunk be egy új Rails projektet az RSpec használatához, majd megvizsgáljuk, hogyan használjuk a Capybarát a nézeteink tesztelésére.
Először is létrehozunk egy új Rails projektet a rails new NAME -T -B
futtatásával, ahol a NAME a létrehozandó projekt könyvtárának elérési útja. A -T
flag azt adja meg, hogy a Rails ne állítson be semmilyen tesztelési keretrendszert az új projektünkhöz, ami pontosan az, amit mi szeretnénk. A -B
flag arra utasítja a Rails-t, hogy ezen a ponton hagyja ki a bundle install
futtatását. Ezután úgy kell szerkesztenünk a Gemfile-unkat, hogy a következőket tartalmazza:
group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end
Ezáltal mind az RSpec, mind a Capybara hozzáadódik a fejlesztői és tesztkörnyezetünkhöz. Ezen a ponton futtassuk a bundle
, hogy telepítsük a gemeket és minden függőséget, amire a projektnek szüksége van. Szeretek ezen a ponton beugrani a rails console
-ba, csak hogy ellenőrizzem, hogy minden működik-e, és ha nem – visszamegyek a Gemfile-omhoz, és kijavítom az esetleges problémákat.
Most, hogy a projektünk váza a helyén van, a következő lépés a tesztelési csomagunk felállítása. Egyszerűen futtassuk a rails generate rspec:install
ezen a ponton, hogy létrehozzuk a spec
könyvtárat és a szükséges fájlstruktúrát. Az utolsó lépés az, hogy megmondjuk a tesztjeinknek, hogy használják a Capybarát. A spec/rails_helper.rb
-ben adjuk hozzá a következőket:
require 'capybara/rspec'
Ez volt a beállítás! Mielőtt továbbmennénk, rögzítsük a projektünkben elvégzett változtatásokat: git add . && git commit -m "initial commit"
. Merüljünk bele egy vezérlő létrehozásába és végezzünk némi tesztelést!
Tesztelési céljainkhoz létrehozunk egy egyszerű űrlapot néhány bemenettel, majd megmondjuk a Capybarának, hogy töltsön ki néhány mintaadatot és küldje el az űrlapot. Nem fogunk aggódni semmilyen összetett modell létrehozása vagy az információk adatbázisba történő perzisztálása miatt. Mondjuk meg a Railsnek, hogy hozzon létre egy users
kontrollert, és állítson be nekünk némi útválasztást:
rails generate controller Users new --no-helper --no-assets --no-view-specs
A --no-helper --no-assets
megadásával azt mondjuk a Railsnek, hogy ne hozzon létre semmilyen eszközt vagy segédet a kontrollerünkhöz. A --no-view-specs
opció arra utasítja a generátort, hogy ne hozzon létre teszteket a nézetekhez – később látni fogjuk, hogyan hozzuk létre a kívánt teszteket. A Rails létrehozott számunkra egy new
útvonalat, amit a config/routes.rb
:
Rails.application.routes.draw do
get 'users/new'
end
ban láthatunk, és a app/controllers/users_controller.rb
:
class UsersController < ApplicationController
def new
end
end
banVégül a Rails létrehozott számunkra egy nézetet a app/views/users/new.html.erb
-ben. Szerkesszük meg ezt a nézetet, hogy létrehozzunk egy egyszerű űrlapot:
<h1>User Login</h1>
<%= form_tag users_path do %>
<%= label_tag :name %>
<%= text_field_tag :name %>
<%= submit_tag "submit" %>
<% end %>
Meg kell tennünk néhány dolgot, hogy befejezzük a bekötést. A routes.rb
-ben adjuk hozzá a következőket:
post 'users' => 'users#welcome'
Egy welcome
műveletet is hozzá kell adnunk a users_controller.rb
-hez:
def welcome
@user = params
render :welcome
end
Az utolsó lépés itt a views/users/welcome.html.erb
létrehozása és néhány HTML és ERB beillesztése a felhasználó nevének megjelenítéséhez:
<h1><%= "Welcome, #{@user}!" %></h1>
Fú! Ha futtatjuk a rails server
-et, és a böngészőnkben a localhost:3000/users/new
-re megyünk, egy űrlapnak kell üdvözölnie minket, amely a nevünk megadására kér minket. Amikor beírjuk a nevünket, és megnyomjuk a submit gombot, át kell, hogy irányítson minket egy oldalra, amely szívélyesen üdvözöl minket. Ez mind szép és jó, de ha minden alkalommal, amikor új űrlapot adunk hozzá vagy új funkciót vezetünk be, a kódunkat így kell tesztelnünk, hogy meggyőződjünk róla, hogy működik-e, az hamarosan fárasztóvá válik. Szerencsére létezik egy eszköz, amely teszteli és automatizálja ezt a folyamatot helyettünk!
Ez az a pont, ahol a Capybara a képbe kerül. A Capybara egy olyan keretrendszer, amely lehetővé teszi számunkra, hogy teszteljük a nézeteinkben lévő kódot az űrlapok adatainak kitöltésével, az oldal tartalmának vizsgálatával és HTTP-kérések küldésével a böngészőnek. Állítsunk be egy specifikációt az újonnan létrehozott űrlapunk tesztelésére:
rails generate rspec:feature form
Ez a spec/features/form_spec.rb
fájlt fogja generálni. Alapértelmezés szerint a Capybara a features
nevű könyvtárban várja a specifikációkat. Szerkesszük meg ezt a fájlt, hogy hozzáadjunk egy új tesztet, amely kitölti a name
szövegmező bemenetét és megnyomja a submit gombot:
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
Ez az! Sikeresen létrehoztuk az első tesztünket Railsben az RSpec és a Capybara segítségével. Ha lefuttatjuk a rspec --format documentation
, látnunk kell, hogy a teszt átmegy. Kísérletezzünk bátran – milyen módokon lehet a tesztet sikertelenné tenni? Vannak más tesztek, amelyeket létrehozhatnánk ehhez a példához? Itt csak a felszínt karcoltuk – remélhetőleg ez elgondolkodtatja Önt arról, hogyan egyszerűsítheti és automatizálhatja a kódja tesztelésének folyamatát ezekkel az eszközökkel, és szoktassa rá magát a kódja gyakori tesztelésére.
Az ebben a bejegyzésben bemutatott kódot itt találja.