AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Wednesday, December 28, 2011

Sviluppare un sito web in TDD usando Ruby e Sinatra

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.

posted @ Wednesday, December 28, 2011 5:30 PM | Feedback (2) | Filed Under [ Tips ]

Powered by:
Powered By Subtext Powered By ASP.NET