2010-06-28 8 views
9

estoy usando algunos de los comparadores rspec Shoulda a prueba mi modelo, siendo uno de ellos:Shoulda rspec adaptadores de: a =>: Crear

describe Issue do 
    it { should_not allow_value("test").for(:priority) } 
end 

Mi problema con esto es que mi validación en mi modelo se parece a esto:

validates_format_of :priority, :with => /^(Low|Normal|High|Urgent)$/, :on => :update 

Así que cuando se ejecuta esta prueba me sale:

beca
1) 'Issue should not allow priority to be set to "test"' FAILED 
    Expected errors when priority is set to "test", got errors: category is invalid (nil)title can't be blank (nil)profile_id can't be blank (nil) 

La validación no está siendo activado usarlo solo se ejecuta en una actualización, ¿cómo puedo usar estos adaptadores de shoulda en una actualización frente a una creación?

Respuesta

12

Creo que debería manejar mejor esto. Me encontré con esto porque solo quiero ejecutar mi verificación de validación de exclusividad para mi modelo de usuario cuando creo nuevos usuarios. Es un desperdicio de una consulta de base de datos de hacerlo en la actualización, ya que no permito que los nombres de usuario a ser cambiados:

validates :username, :uniqueness => { :case_sensitive => false, :on => :create }, 

Afortunadamente, usted puede evitar esto definiendo explícitamente el "sujeto":

describe "validation of username" do 
     subject { User.new } 
     it { should validate_uniqueness_of(:username) } 
    end 

De esta forma solo está probando en una nueva instancia. Para su caso, probablemente pueda simplemente cambiar el tema para que sea algo guardado en la base de datos, con todos los campos necesarios establecidos.

+0

Gracias @endium. Del mismo modo, 'subject {FactoryGirl.create (: user)}' se puede usar para probar validaciones 'on:: update'-only. – scarver2

Cuestiones relacionadas