J'ai commencé mon voyage avec TDD dans Rails et j'ai rencontré un petit problème concernant les tests pour les validations de modèles que je n'arrive pas à trouver une solution. Disons que j'ai un modèle User,
class User < ActiveRecord::Base
validates :username, :presence => true
end
et un simple test
it "should require a username" do
User.new(:username => "").should_not be_valid
end
Cela permet de tester correctement la validation de la présence, mais que faire si je veux être plus précis ? Par exemple, tester full_messages sur l'objet errors
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
Ce qui me préoccupe dans la première tentative (en utilisant should_not be_valid), c'est que RSpec ne produira pas de message d'erreur descriptif. Il dit simplement "expected valid ? to return false, got true". Cependant, le deuxième exemple de test présente un inconvénient mineur : il utilise la méthode create au lieu de la méthode new pour accéder à l'objet errors.
J'aimerais que mes tests soient plus spécifiques sur ce qu'ils testent, mais qu'en même temps ils n'aient pas à toucher à une base de données.
Quelqu'un a-t-il des commentaires à faire ?