2012-10-03 4 views

Répondre

2

Vous n'avez pas vraiment besoin de bouchonner le rappel de before_save plutôt vous pouvez écraser des méthodes appelées par la rappeler. Vous pouvez déplacer le comportement vers une méthode et un talon à la place.

before_save :downcase_email 

def downcase_email 
    self.email.downcase! 
end 

Puis, dans vos spécifications:

user.stub(:downcase_email).and_return(true) 
+0

Merci, @beef jerky. Ça fonctionne bien. – alex

1

Si vous utilisez la maquette, il peut être fait comme ça

describe User 
    it "should accept email_downcase before save" do 
    user = mock(User) 
    user.should_receive(:email_down).and_return(email.downcase) # => use return in case you want to 
    end 
end 

grâce

+0

Merci, @Paritosh Singh. Malheureusement, cela ne résout pas le problème. Parce que le problème est une erreur lors de la publication 'create': méthode non définie 'downcase! ' pour néant: NilClass. @beef jerky a donné la bonne réponse. – alex

-1

-vous vraiment besoin de cette méthode before_save? peut-être que ce serait mieux si vous surchargez = e-mail, de sorte que le courrier électronique s'en minuscule juste après cession et vous avez cette en minuscule, même avant d'enregistrer le record

User < ActiveRecord 
    def email=(value) 
    write_attribute(:email, value.downcase) 
    end 
end 

Je ne sais pas si cela aide pour votre test, mais parfois c'est mieux qu'un callback before_save

Questions connexes