2010-01-05 6 views
5

J'utilise Shoulda en combinaison avec Test :: Unit sur l'un des projets sur lesquels je travaille. La question que je suis en cours d'exécution en est que j'ai récemment changé ceci:Shoulda: Test validates_presence_of: on =>: mise à jour

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

à ceci:

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

essais Auparavant, mes (en passant) ressemblait à ceci:

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

Comme autant que je peux dire, il n'y a aucun paramètre à should_validate_presence_of qui fera que ce test continue à passer avec les changements spécifiés ci-dessus. À court d'abandonner Shoulda en testant l'exigence de :attribute_two, y a-t-il un moyen de contourner cela?

Répondre

2

Dans ce passé, je viens d'utiliser une petite mesure devrait bloquer pour contourner ce problème:

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 

Espérons que Shoulda va continuer à améliorer en permettant de nouvelles options de validation AR dans l'avenir. Dites-moi ce que vous en pensez, applaudissez.

2

J'ai essayé une solution similaire à celle suggérée par tsdbrown. Ce type de test passe quand j'ai:
validates_presence_of: attr_two

Mais le test échoue si je change le modèle:
validates_presence_of: attr_two,: on =>: sauver

Il échoue parce que le: erreur de attr_two est [] au lieu de [ "ne peut pas être vide"]

2

en Rspec vous pouvez effectuer les opérations suivantes:

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'en est-il quelque chose comme thi s? (pour 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) } 
Questions connexes