2010-10-19 4 views
1

J'essaie de créer un test rspec pour un modèle pour les États. Ce modèle d'état est associé à un modèle de pays. Mes usines ressemblent àrspec association de modèles avec Factory Girl

Factory.define :country do |country| 
    country.name "Test Country" 
end 

Factory.define :state do |state| 
    state.name "Test State" 
    state.association :country 
end 

J'ai fait un rspec modèle d'état fonctionnel mais je ne sais pas si la façon dont je mis en place le @attr d'état est correct ou un hack

require 'spec_helper' 

describe State do 
    before(:each) do 
    country = Factory(:country) 
    @attr = { :name => 'Test State', :country_id => country.id } 
    end 

    it "should create a new state given valid attributes" do 
    State.create!(@attr) 
    end 
end 

Être nouveau sur les rails/rspec Je ne suis pas sûr si force dire :country_id => country.id est correct ou un moyen pas cher de résoudre le problème. J'apprécie toute aide ou suggestion que je peux obtenir.

J'inclus également les deux modèles juste au cas où.

class Country < ActiveRecord::Base 
    has_many :states 
    attr_accessible :name 

    validates :name, :presence => true, 
        :uniqueness => {:case_sensitive => false} 
end 

class State < ActiveRecord::Base 
    belongs_to :country 

    attr_accessible :name, :country_id 

    validates :name, :presence => true, 
        :uniqueness => {:case_sensitive => false, :scope => :country_id} 

    validates :country_id, :presence => true 
end 

Répondre

2

Ceci est un bon début, mais votre test ne teste rien. En règle générale, vous devriez toujours avoir un appel "should" par bloc "it".

Voici une autre façon de regarder, en supposant les mêmes usines et modèles:

require 'spec_helper' 

describe State do 
    before(:each) do 
    @state = Factory.build(:state) 
    end 

    it "should create a new state given valid attributes" do 
    @state.save.should be_true 
    end 
end 
+0

Merci, fonctionne très bien maintenant! – rrivas

Questions connexes