Ruby on Rails Dojo

18.06.2007

4th step: test, test, test!

Filed under: semilla — carlos @ 3:37

Bene, abbiamo detto di voler (anzi dove) aggiungere i test per coprire le funzionalità appena introdotte.
Anzitutto il modello: abbiamo modificato il file app/models/user.rb aggiungendo i campi obbligatori first_name e last_name, pertanto dobbiamo verificare che l’assenza di questi due parametri sia vincolante per il signup. Aggiungiamo i seguenti metodi alla classe UserTest (file test/unit/user_test.rb):

def test_should_require_first_name
  assert_no_difference User, :count do
   u = create_user(:first_name => nil)
  assert u.errors.on(:first_name)
  end
end


def test_should_require_last_name
  assert_no_difference User, :count do
   u = create_user(:last_name => nil)
  assert u.errors.on(:last_name)
  end
end

e modifichiamo il metodo create_user:


def create_user(options = {})
  User.create({ :first_name => 'mario', :last_name => 'rossi', :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options))
end

dove abbiamo aggiunto i suddetti campi.

A questo punto lanciano il comando:

$ rake test:units

non dovremmo avere problemi.

Discorso analogo per il controller: adesso siamo “sicuri” che il modello si comporta correttamente, ma non possiamo ancora dire altrettanto per la logica dell’applicazione.
Apriamo il file test/functional/account_controller_test.rb ed aggiungiamo i due metodi:

def test_should_require_first_name_on_signup
  assert_no_difference User, :count do
   create_user(:first_name => nil)
   assert assigns(:user).errors.on(:first_name)
   assert_response :success
  end
end


def test_should_require_last_name_on_signup
  assert_no_difference User, :count do
   create_user(:last_name => nil)
   assert assigns(:user).errors.on(:last_name)
   assert_response :success
  end
end

anche qui modifichiamo il metodo privato create_user agiungendo un default per i suddetti campi:

def create_user(options = {})
  post :signup, :user => { :first_name => 'mario', :last_name => 'rossi', :login => 'quire', :email => 'quire@example.com',
:password => 'quire', :password_confirmation => 'quire' }.merge(options)
end

e verifichiamo lanciando il comando:

$ rake test:functionals

Per natura sono un po’ diffidente/paranoico… quindi controllo con il browser se l’applicazione continua a funzionare anche dopo aver aggiunto i test: tutto ok, funziona 😉 !

Annunci

1 commento »

  1. prova a mettere un attorno al codice. dovrebbe tenerti l’indentazione..

    Commento di kiaroskuro — 19.06.2007 @ 7:42 | Rispondi


RSS feed for comments on this post. TrackBack URI

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.

%d blogger hanno fatto clic su Mi Piace per questo: