En utilisant Shoulda, des idées sur la façon de permettre vide lorsque avoir ce test:Allow blanc sur validate_uniqueness_of devrait
should validate_uniqueness_of(:email)
Merci.
En utilisant Shoulda, des idées sur la façon de permettre vide lorsque avoir ce test:Allow blanc sur validate_uniqueness_of devrait
should validate_uniqueness_of(:email)
Merci.
should allow_value(" ").for(:email)
should allow_value(nil).for(:email)
peut-être
should validate_uniqueness_of(:email, :allow_blank => true)
Non, ça ne marche pas. – Pablo
Je l'ai tout compris !! Le paramètre validate_uniqueness_of se base sur la valeur de l'attribut que vous testez actuellement sur le premier enregistrement de la base de données. Donc, si le premier enregistrement dans la base de données est vide ou nul pour cet attribut, votre test donnera toujours une erreur comme ceci: "Failure/Error: it {should validate_uniqueness_of (: customer_number) .case_insensitive.scoped_to (: user_id)} Les erreurs attendues à inclure "a déjà été prise" lorsque customer_number est défini sur "zéro", ne comportent aucune erreur ".
Alors, comment pouvons-nous résoudre ce problème? Assurez-vous de supprimer tous les enregistrements existants et que le premier enregistrement contient une valeur renseignée pour l'attribut.
modèle:
validates_uniqueness_of :customer_number, :scope => :user_id, :case_sensitive => false, :allow_blank => true, :allow_nil => true
spec modèle
:
describe 'Validation' do
it { should allow_value('').for(:customer_number) }
describe 'When a user exists with the same customer_number and user' do
before(:each) do
Customer.destroy_all
# Saving a single customer to validate uniqueness.
@existing = Factory(:customer, :customer_number => 'test') # If you leave customer_number blank here the matcher will check if it can save a new record with a blank customer_number which is possible since we allow blanks. So make sure your first record has a filled in value!!
end
subject do
Factory.build(:customer)
end
it { should validate_uniqueness_of(:customer_number).case_insensitive.scoped_to(:user_id) }
end
end
Hope this éclairci certains problèmes des gens :)
C'est la meilleure explication pour cette erreur de test (ce qui semble un problème assez commun!). Merci. –
je suis encore « erreurs devraient inclure "a déjà été prise" lorsque e-mail est défini sur zéro, n'a pas d'erreur "lors de l'exécution doit valider_unicité (de: email). – Pablo