I dubbi esistenzial sul design e sul testing

Ciao a tutti,

Alcuni dubbi “esistenziali” … scusassero se mi spiego male o se
l’attuale design vi sembra orribile.

SHORT VERSION: come si fa unit testing su modelli con relazioni?

LONG VERSION:

Ho un modello Network, e tre modelli attachment_fu (Edgefile,
Configfile, [Annotationfile] ).

Annotation file puo esserci o non esserci (opzionale)

Avrei fatto questo

class Network < ActiveRecord::Base
has_one :edgefile, :dependent => :destroy
has_one :annotationfile, :dependent => :destroy
has_one :configfile, :dependent => :destroy
end

…e negli altri modelli: belongs_to :network

Vi sembra ragionevole?

Per controllare la presenza di un edgefile e un configfile in Network:

validates_presence_of :edgefile, :configfile
validates_associated :edgefile, :configfile

ha senso? o sto sbagliando completamente le validazioni?

Come procedo per lo unit testing?

Mi spiego: quando in un test creo una nuova network, come faccio ad
assegnarli anche un edgefile e un configfile?

Ora sto facendo cosi:

network = Network.new(
:name => name,
:description => ‘blablabla’,
:edgefile => edgefiles(:barabasi),
:configfile => configfiles(:barabasi)
)

Sto “riciclando” delle fixtures ma non sono sicura che sia una buna
idea.

In sintesi: ma come si fa unit testing su modelli con relazioni?

Tucano

Un consiglio che mi sento di darti e’ di non testare features offerte
da ActiveRecord. E’ abbastanza inutile. Sono gia testate nel
framework. Invece testa tutto cio’ che crei tu. Se usi rspec, puoi
lanciare un rake spec:rcov che genera una analisi di cosa non e’
coperto da test.
Altro consiglio e’ di bruciare ogni ricordo di Fixtures, ma mi pare di
capire che questo gia lo sai. :slight_smile:

Per costruire data on the fly for test io di solito uso FactoryGirl
(GitHub - thoughtbot/factory_bot at master) oppure
Machinist (GitHub - notahat/machinist: Fixtures aren't fun. Machinist is.).
Entrambi permettono di impostare associazioni tra modelli, su github
trovi qualche esempio.
Facci sapere come va, saluti.
Enrico

2009/3/13 Tucano [email protected]:

has_one :configfile, :dependent => :destroy
validates_presence_of :edgefile, :configfile
Ora sto facendo cosi:

In sintesi: ma come si fa unit testing su modelli con relazioni?

Tucano


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Enrico T.
IT consultant, accessible web sites and web applications
Sydney, NSW, Australia
[email protected]
mobile (IT) +393286590765
mobile (AU) +00610416748450

Ciao,

Il codice del coso lo trovate online

Ho risolto cosi (concettualmente parlando)

Ho un modello Network, e tre modelli attachment_fu
(Edgefile,Configfile, [Annotationfile] ).

class Network valida e fa test sui suoi attributi e se ne sbatte di
quello che succede ai suoi sottoposti (e’ un capo crudele)

quindi niente piu’

validates_presence_of :edgefile, :configfile
validates_associated :edgefile, :configfile

I tre obbedienti modelli attachment_fu fanno le loro validazioni.

Ho aggiunto un modello Fileservice (no ActiveRecord) che viene
chiamata dal controller e si occupa di controllare che ci sia tutto
(il caporale!).

Fonti: Advanced Rails Recipes e Professional Ruby on Rails (rappin)

Per i test, ti do ragione… ma mi diverto troppo a scriverli!

Chiudo con le mie CRITICHE a rails (forza coi flame!)

  1. La suite di test e’ troppo ben fatta, cosi’ ben fatta che ci perdo
    un sacco di tempo :stuck_out_tongue:
  2. Il codice e’ cosi’ sintetico che finisci anche tu per tentare di
    scrivere codice ‘Haiku’ (xkcd: Not Enough Work) … e si perde altro
    tempo!

saluti!

Tucano

Il giorno 15/mar/09, alle ore 01:26, Enrico T. ha scritto: