2009-05-12 5 views
1

En ce moment, j'ai une fonction de modèle qui est quelque chose comme ceci:Way à specing méthode simple modèle

Class Address 
    def first_line 
    "#{self.building_name} #{self.street_name} #{self.suburb}".squeeze(" ").strip 
    end 
end 

Mon usine d'adresse est définie comme ceci:

Factory.define :address do |f| 
    f.building_name "Alpha" 
    f.street_name "Bravo St" 
    f.suburb "Charlie" 
end 

Il existe essentiellement deux façons de écrire la spécification, premier est:

before(:each) do 
    @address = Factory.build(:address) 
end 

@address.first_line.should == @address.building_name + " " + 
           @address.street_name + " " + 
           @address.suburb 

Et autre façon est

@address.first_line.should == "Alpha Bravo St Charlie" 

De quelle façon pensez-vous que c'est mieux? Et quelle est la raison de soutenir l'un contre l'autre?

Répondre

1

Aucune. Le premier est un peu verbeux et se sent aussi un peu trop en rapport avec l'implémentation de la méthode. Le second couple étroitement vos spécifications à vos usines et sera une énorme douleur lorsque vous avez besoin de changer l'usine.

Au lieu de cela, utilisez le style court seconde, mais que les données soient utilisées explicitement dans les spécifications:

@address = Factory.build(:address, :building_name => "Alpha", 
            :street_name => "Bravo St.", 
            :suburb => "Charlie") 

@address.first_line.should == "Alpha Bravo St. Charlie" 

C'est aussi bon parce que vous pouvez fournir différentes données de test à la méthode, qui est nécessaire pour tester certains de ses autres caractéristiques:

@address = Factory.build(:address, :building_name => "Alpha ", 
            :street_name => " Bravo St. ", 
            :suburb => " Charlie ") 

@address.first_line.should == "Alpha Bravo St. Charlie" 
Questions connexes