2010-12-04 38 views
4

Je travaille sur une application où la plupart, sinon la totalité, des données est portée à current_organization. Donc, dans ma trouvaille appels dans mes contrôleurs, j'ai des choses comme celle-ci par exemple:Comment bien bouter une méthode d'association Rails via moka et test/unit?

def show 
    @user = current_organization.users.find(params[:id]) 
end 

Cependant, dans mes tests de contrôleur, je vais avoir du mal à comprendre la bonne façon (ou tout autre moyen) à talon ces appels afin que je puisse tester des choses comme:

get :show, :id => 1 
assert_response :success 

Ceux-ci sont ne pas dire « AR ne peut pas trouver l'utilisateur avec ID = 1 et organization_id = 3 » ou autre chose. Peu importe ce que j'essaie, je n'arrive pas à le contourner.

Mon bloc de configuration ressemble à ceci:

setup do 
    company = organizations(:company) # fixture 
    @controller.stubs(:current_organization).returns(company) 
    # now what do I stub, if anything? 
end 

J'ai essayé de faire des choses comme: company.stubs(:users).returns([users(:one), users(:two)]) mais cela ne fonctionne pas parce que l'appel AR find() n'existe pas pour un tableau de base.

Devrais-je définir le tableau des faux utilisateurs comme une variable comme fake_users et ensuite faire quelque chose comme fake_users.stubs(:find).returns(@user)? Cela ne me semblait pas juste, mais c'est peut-être la bonne façon.

Je suis juste à la recherche de la meilleure façon de gérer cela. J'utilise moka et test/unité, si cela compte ou aide.

Merci!

Répondre

2

Sauf si vous avez besoin spécifiquement l'accès au fake_users, je pense que la chose la plus simple que vous pourriez faire est probablement quelque chose comme ceci: -

company.stubs(:users => stub('users', :find => users(:one))) 

Malheureusement, ce genre de code est difficile à se moquer. Vous remarquerez que ma solution suggérée est plutôt fragile.

+0

Merci, cela devrait fonctionner pour ce dont j'ai besoin. – rpheath