2010-01-05 7 views
5

Estoy usando Shoulda en combinación con Test :: Unit en uno de los proyectos en los que trabajo. El problema que estoy corriendo en es que recientemente he cambiado esto:Shoulda: Prueba validates_presence_of: on =>: update

class MyModel < ActiveRecord::Base 
    validates_presence_of :attribute_one, :attribute_two 
end 

a esto:

class MyModel < ActiveRecord::Base 
    validates_presence_of :attribute_one 
    validates_presence_of :attribute_two, :on => :update 
end 

Anteriormente, mis pruebas (pasando) era la siguiente:

class MyModelTest < ActiveSupport::TestCase 
    should_validate_presence_of :attribute_one, :attribute_two 
end 

Como Hasta donde sé, no hay ningún parámetro en should_validate_presence_of que haga que esta prueba continúe pasando con los cambios especificados anteriormente. Si no se abandona Shoulda cuando se prueba el requisito de :attribute_two, ¿hay alguna forma de evitar esto?

Respuesta

2

En ese pasado que acaba de utilizar un pequeño personalizado debe bloquear para evitar este problema:

should "require :attr_two on update" do 
    mm = Factory(:my_model) 
    mm.attr_two = nil 
    mm.save 
    assert_equal false, mm.valid? 
    assert_equal("can't be blank", mm.errors.on(:attr_two)) 
end 

Esperamos que la debería mejorar mantendrá al permitir más opciones de validación de AR en el futuro. Déjame saber lo que piensas, salud.

2

He intentado con una solución similar a la sugerida por tsdbrown. Este tipo de prueba pasa cuando tengo:
validates_presence_of: attr_two

Pero la prueba falla si cambio el modelo de:
validates_presence_of: attr_two,: ON =>: salvar

Es un error porque el: attr_two de error es [] en lugar de [ "no puede estar en blanco"]

2

En Rspec puede hacer lo siguiente:

describe MyModelTest do 
    describe "validations" do 
    should_validate_presence_of :attribute_one 

    context "on update" do 
     subject { FactoryGirl.create(:my_model_test) } 

     should_validate_presence_of :attribute_two 
    end 
    end 
end 
3

¿Qué pasa algo así como Thi s? (para shoulda-matchers-3.1.1)

subject { FactoryGirl.build(:your_model) } 
it { is_expected.to validate_presence_of(:attribute_one) } 
it { is_expected.to validate_presence_of(:attribute_two).on(:update) } 
Cuestiones relacionadas