Je suis nouveau dans Ruby et Rspec. J'écris mon premier test RSpec et je pense que mon code n'est pas très bon. Mais je ne sais pas comment je peux l'améliorer.DRY Problème avec Rspec comment puis-je le réparer
Dans ce fichier je vais vérifier ma classe d'adresse. Le first_name et le last_name sont les mêmes mais j'ai deux gros blocs pour cela. Comment puis-je refactoriser mon code? Et quel est un bon moyen de vérifier RegExp.
Merci.
specify { Factory.build(:address).should be_valid }
### first_name ###
it "should be invalid without an first_name" do
Factory.build(:address, :first_name => nil).should_not be_valid
end
context "first_name" do
it "should be invalid with more than 20 chars" do
Factory.build(:address, :first_name => "#{'b'*21}").should_not be_valid
end
it "should be invalid with less than 3 chars" do
Factory.build(:address, :first_name => "ll").should_not be_valid
end
it "should be valid with an valid first_name" do
valid_names.each do |name|
Factory.build(:address, :first_name => name).should be_valid
end
end
it "should be invalid with an invalid first_name" do
invalid_names.each do |name|
Factory.build(:address, :first_name => name).should_not be_valid
end
end
end
### last_name ###
it "should be invalid without an last_name" do
Factory.build(:address, :last_name => nil).should_not be_valid
end
context "last_name" do
it "should be invalid with more than 20 chars" do
Factory.build(:address, :last_name => "#{'b'*21}").should_not be_valid
end
it "should be invalid with less than 3 chars" do
Factory.build(:address, :last_name => "ll").should_not be_valid
end
it "should be valid with an valid last_name" do
valid_names.each do |name|
Factory.build(:address, :last_name => name).should be_valid
end
end
it "should be invalid with an invalid last_name" do
invalid_names.each do |name|
Factory.build(:address, :last_name => name).should_not be_valid
end
end
end
def valid_names
["Kai","Ülück's","Schmeißtzs","Rald","Dr. Franzen","rolfes","Lars Michael","Öcück","Mark-Anthony"]
end
def invalid_names
["-#+*32"," ","a& &lkdf","_-_.l##df"," aaadsa","M€lzer"]
end
Je voudrais utiliser la méthode objet pour cela, comme son fait ici: https://github.com/rspec/rspec-expectations/blob/master/features/expectations/attribute_of_subject.feature – iain
Merci de votre pour votre aide – ThreeFingerMark