Kuvan on ottanut Karen Lau Unsplashissa

Testien kirjoittaminen sovelluskoodia varten on asia, jonka tekemiseen kaikkien ohjelmoijien pitäisi perehtyä, riippumatta valitusta kielestä tai kehyksestä. RSpec on uskomaton Rubyyn rakennettu testaussarja ja DSL (Domain-Specific Language), jonka avulla voit kirjoittaa yksikkötestejä helposti käyttämällä joukon ennalta määriteltyjä menetelmiä. Tutustumiseni koodin kirjoittamiseen Ruby-kielellä liittyi tiiviisti kokemukseen RSpecin uskonnollisesta käyttämisestä kirjoittamani testien testaamiseen, joten kun aloin opetella Railsia, RSpecin käytön jatkaminen teki siirtymisestä luonnollisempaa ja saumattomampaa. Rails käyttää oletusarvoisesti MiniTest-testauskehystä. Keskustelemme siitä, miten uusi Rails-projekti asetetaan käyttämään RSpeciä, ja sen jälkeen tutkimme Capybaran käyttöä näkymien testaamiseen.

Aluksi luomme uuden Rails-projektin ajamalla rails new NAME -T -B, jossa NAME on luotavan projektin hakemiston polku. Lippu -T määrittää, että Railsin ei pitäisi perustaa mitään testauskehystä uudelle projektillemme, mikä on juuri sitä, mitä haluamme. Lippu -B ohjeistaa Railsia ohittamaan bundle install:n suorittamisen tässä vaiheessa. Seuraavaksi meidän on muokattava Gemfilemme sisältämään seuraavat:

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

Tämä lisää sekä RSpecin että Capybaran kehitys- ja testiympäristöihimme. Tässä vaiheessa suorita bundle asentaaksesi gemit ja kaikki projektin tarvitsemat riippuvuudet. Tykkään pudota rails console tässä vaiheessa vain tarkistaakseni, että kaikki toimii, ja jos ei – palaan takaisin Gemfileeni ja korjaan mahdolliset ongelmat.

Nyt kun meillä on projektimme luuranko paikoillaan, seuraava askel on koota testauspakettimme. Suorita tässä vaiheessa yksinkertaisesti rails generate rspec:install luodaksesi spec-hakemiston ja tarvittavan tiedostorakenteen. Viimeinen vaihe on kertoa testeillemme, että ne käyttävät Capybaraa. Lisää spec/rails_helper.rb-kenttään seuraavat:

require 'capybara/rspec'

Se oli siinä kaikki asennuksen osalta! Ennen kuin jatkamme eteenpäin, kiinnitetään projektimme tekemät muutokset: git add . && git commit -m "initial commit". Sukelletaanpa ohjaimen luomiseen ja testaamiseen!

Kuva: Max Nelson on Unsplash

Testaustarkoituksiamme varten luomme yksinkertaisen lomakkeen, jossa on joitain syöttötietoja, ja käskemme sitten Capybaran täyttää joitain esimerkkidatoja ja lähettää lomakkeen. Emme huolehdi monimutkaisten mallien luomisesta tai tietojen tallentamisesta tietokantaan. Kerrotaan Railsille, että se luo users-ohjaimen ja määrittelee meille reitityksen:

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

Määrittämällä --no-helper --no-assets kerromme Railsille, ettei se luo ohjaimellemme mitään omaisuutta tai apulaista. Vaihtoehto --no-view-specs neuvoo generaattoria olemaan luomatta testejä näkymille – näemme myöhemmin, miten voimme luoda haluamamme testit. Rails on luonut meille new-reitin, jonka näemme kohdassa config/routes.rb:

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

Ja kohdassa app/controllers/users_controller.rb:

class UsersController < ApplicationController
def new
end
end

Viimeiseksi Rails loi meille näkymän kohdassa app/views/users/new.html.erb. Muokataan tätä näkymää luodaksemme yksinkertaisen lomakkeen:

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

Meidän täytyy tehdä pari asiaa, jotta saamme tämän johdotuksen valmiiksi. Lisäämme routes.rb-kohtaan seuraavaa:

post 'users' => 'users#welcome'

Meidän on myös lisättävä welcome-toiminto users_controller.rb:

def welcome
@user = params
render :welcome
end

Viimeiseksi luomme views/users/welcome.html.erb:n ja lisäämme siihen HTML:n ja ERB:n käyttäjän nimen näyttämiseksi:

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

Phew! Jos ajamme rails server ja siirrymme selaimessamme osoitteeseen localhost:3000/users/new, meitä pitäisi tervehtiä lomakkeella, jossa meitä pyydetään syöttämään nimemme. Kun kirjoitamme nimemme ja painamme lähetä-painiketta, meidät pitäisi ohjata sivulle, joka toivottaa meidät lämpimästi tervetulleeksi. Tämä on ihan hyvä ja hyvä, mutta koodin testaaminen tällä tavalla varmistaaksemme, että se toimii joka kerta, kun lisäämme uuden lomakkeen tai otamme käyttöön uuden ominaisuuden, käy pian rasittavaksi. Onneksi on luotu työkalu, joka testaa ja automatisoi tämän prosessin puolestamme!

Tässä kohtaa Capybara astuu kuvaan. Capybara on kehys, jonka avulla voimme testata näkymien koodia täyttämällä lomaketietoja, tarkastelemalla sivun sisältöä ja lähettämällä HTTP-pyyntöjä selaimelle. Asetetaan speksejä äskettäin luodun lomakkeemme testaamiseksi:

rails generate rspec:feature form

Tämä luo tiedoston spec/features/form_spec.rb. Oletusarvoisesti Capybara odottaa löytävänsä speksit hakemistosta nimeltä features. Muokataan tätä tiedostoa lisäämällä siihen uusi testi, joka täyttää name tekstikentän syötteen ja painaa 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

Se on valmis! Olemme onnistuneesti luoneet ensimmäisen testimme Railsissa RSpecin ja Capybaran avulla. Jos ajamme rspec --format documentation, meidän pitäisi nähdä, että testi läpäisee. Kokeile vapaasti – mitkä ovat tapoja saada testi epäonnistumaan? Onko muita testejä, joita voisimme luoda tähän esimerkkiin? Olemme raapaisseet tässä vasta pintaa – toivottavasti tämä saa sinut miettimään, miten voit yksinkertaistaa ja automatisoida koodisi testaamista näiden työkalujen avulla, ja saada tavaksi testata koodisi usein.

Käy täällä tässä postauksessa esitelty koodi.

Vastaa

Sähköpostiosoitettasi ei julkaista.