2009-01-31 6 views
3

Je voudrais mettre en œuvre la méthode User.calculate_hashed_password. J'essaie d'utiliser la bibliothèque de test de Shoulda qui fonctionne avec les outils de test intégrés de Rails, donc une réponse liée à Test :: Unit serait tout aussi bonne que celle liée à Shoulda (je pense).Comment testez-vous si un modèle a une méthode donnée dans Rails?

Je suis en train de comprendre ce que je dois tester et comment je le tester. Mon idée initiale est de faire quelque chose comme ...

class UserTest < ActiveSupport::TestCase 
    should 'Return a hashed password' 
    assert_not_nil User.calculate_hashed_password 
    end 
end 

Est-ce la bonne façon de le faire?

+0

Que fait 'calculate_hashed_password'? Génère une version hachée de l'attribut 'password'? –

+0

Oui, c'est vrai. – Ethan

Répondre

8

Vous n'avez pas besoin de vérifier que la méthode existe, juste que la méthode se comporte correctement. Dites quelque chose comme ceci:

class UserTest < ActiveSupport::TestCase 
    setup do 
    @user = User.new 
    end 

    should 'Calculate the hashed password correctly' 
    @user.password = "password" 
    @user.hashed_password = "xxxxx" # Manually calculate it 
    end 
end 

(je ne l'utilise pas Shoulda, donc excuse toute erreur de syntaxe criantes.)

Ce test échouera si la méthode n'existe pas.

3

Peut-être utiliser respond_to?

5

Je suis d'accord avec Otto; mais comme dylanfm l'a noté, j'utilise #respond_to pour tester les associations dans RSpec.

it "should know about associated Projects" do 
    @user.should respond_to(:projects) 
end 
+0

Je le fais aussi, juste comme une simple vérification d'intégrité que je mets la ligne d'association dans la classe du modèle. – Otto

Questions connexes