In questo post illustrerò un modo per sviluppare un sito web che usa Sinatra usando la pratica del TDD. Per poter provare gli esempi occorre aver seguito
i passi del mio precedente post.
Sinatra, come altri framework scritti in Ruby, aderisce allo standard Rack. In sintesi basta realizzare un oggetto
che risponde al messagio call, prende un hash come parametro e risponde con un vettore di tre elementi: lo status code, l'header http e il body.
Un esempio di un oggetto che rispetta lo standard è:
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
Questo ha il vantaggio di avere degli oggetti già pronti per poter scrivere i test. Prima occorre da terminale eseguire il comando:
gem install rack-test
in modo da installare tutto ciò che ci serve.
A questo punto siamo pronti a scrivere il nostro primo test (il file l'ho chiamato sitetest.rb):
require './site'
require 'test/unit'
require 'rack/test'
class SiteTest < Test::Unit::TestCase
def test_homepage
browser = Rack::Test::Session.new(Rack::MockSession.new(Sinatra::Application))
browser.get '/'
assert browser.last_response.ok?
end
end
Creiamo anche il file (site.rb) dell'applicazione che per ora non ha impostato nessun routing:
require 'sinatra'
Se ora lanciamo il test con il comando ruby sitetest.rb
. Vediamo che l'assert fallisce.
Il codice minimo per la barra verde è:
require 'sinatra'
get '/' do
end
Rilanciamo il test ed ecco la prima barra verde!
A questo punto vogliamo che la nostra pagina abbia il contenuto Hello World. Aggiungiamo quindi un assert:
assert_equal browser.last_response.body, 'Hello World'
Lanciamo nuovamente il test ed otteniamo il messaggio:
1) Failure:
test_homepage(SiteTest) [sitetest.rb:13]:
<""> expected but was
<"Hello World">.
Modifichiamo il codice di produzione per la barra verde:
require 'sinatra'
get '/' do
'Hello World'
end
Alcune note:
- Affinchè un metodo venga eseguito dal test runner deve iniziare per test
Sinatra::Application
è l'oggetto che rispetta lo standard rack
- Maggiori dettagli su come scrivere i test usando Rack e Sinatra sono qui
Buon divertimento.