2010-10-20 7 views
2

J'écris un rspec pour un modèle d'adresse qui a un attribut polymorphe appelé :addressable. J'utilise une fille d'usine pour tester.rspec validates_presence_of attributs polymorphes ruby ​​sur rails

Ce modèle n'a pas de contrôleur car je ne souhaite pas créer une adresse autonome, mais cela n'empêche pas le rspec de créer une adresse autonome. Mon modèle, usine et rspec sont

class Address < ActiveRecord::Base 
    belongs_to :addressable, :polymorphic => true 
    belongs_to :state 

    attr_accessible :street, :city, :state_id, :zip 

    validates_presence_of :street, :city, :zip, :state 

    validates_associated :state 
end 

Factory.define :address do |address| 
    address.street "1234 Any st" 
    address.city "Any City" 
    address.zip "90001" 
    address.association :state 
end 

describe Address do 
    before(:each) do 
    state = Factory(:state) 
    @attr = {:street => "1234 Any St", :city => "Any City", :zip => "Any Zip", :state_id => state.id} 
    end 

    it "should create a new address given valid attributes" do 
    Address.create!(@attr).valid?.should be_true 
    end 
end 

Ce test rspec va créer une adresse avec addressable_id et addressable_type NULL et NULL, mais si je crée de tout autre modèle, permet de dire un modèle d'utilisateurs ou d'un modèle de magasin, il sera mis dans les bonnes données. Donc ce que je suis en train de comprendre et de la recherche, sans succès, comment voulez-vous validate_presence_of un attribut polymorphes et le tester dans une usine.

Désolé d'être long, mais je n'ai pas été en mesure de trouver une solution pour cela au cours des dernières heures et je commence à considérer que je pourrais aborder ce problème.

Répondre

0

Je ne vois rien dans vos spécifications qui associe l'adresse avec un adressable. Vous créez une adresse, mais c'est juste dans l'espace - à quoi est-ce connecté? NULL pour addressable_id et addressable_type semble correct.