Problème avec test d'intégration

Bonjour,

J’essaye de mettre en place des tests d’intégration et j’ai un
problème que je n’arrive pas à résoudre.
voici mon code où je veux tester la saisie dans un formulaire
post buildings_path, {:building => {:name => “test”},
:address => {:number => ‘1’, :way => ‘19’,
:address1 => “”, :address2 =>
“”, :address3 => “”,
:zipcode => “”, :city => “” },
:country => {:id => ‘67’},
:live_here => “”
},
{:user_id => users(:admin_crussol).id}
assert :success
assert_select(“div”,
“#{MessagesLoad.custom_message(:error_a_city)}”)

Le assess success fonctionne mais le assert_select me montre que j’ai
une erreur dans mon action “create”
Full Trace \n \n \n app/controllers/buildings_controller.rb:
41:in create'\n/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/base.rb:1158:insend’ …

à une ligne ou j’ai :
@role_admin = Role.new(:user_id => current_user.id, :role_type_id =>
Role::ADMIN )

J’ai l’impression que c’est peut être du au passage de mon paramètre
de session user_id mais je n’en suis pas sur.
Est ce que quelqu’un a une idée?
Merci
Nicolas

PS: je précise que en réel l’action create marche

2008/8/24 Tranquiliste [email protected]:

                                  :zipcode => "", :city => "" },

Full Trace \n \n \n app/controllers/buildings_controller.rb:
Merci
Nicolas

PS: je précise que en réel l’action create marche

Je suppose que current_user est la valeur issue de
restfull_authentification. Alors il va chercher le user dans sa
session et non dans ces paramètre ce que tu as fait.


Cyril M.

Rails ne confond pas la session et les variables post.

Encore heureux, parce que sinon, imaginons que je sois un utilisateur
mal
intentionné, et que je puisse mettre ce que je veux en session, par
exemple
:user_id => {coller ici l’identifiant de l’admin du site}…

Donc, il faut que tu mette en session ce qui appartient à la session, et
en
params ce qui appartient aux params.


Michel B.

Je suppose que current_user est la valeur issue de
restfull_authentification. Alors il va chercher le user dans sa
session et non dans ces paramètre ce que tu as fait.


Cyril M.http://blog.shingara.fr

Oui il s’agit bien de la valuer issue de restful_auth, mais je passe
la session au post en faisant
{:user_id => users(:admin_crussol).id}
Ou alors je n’ai pas compris comment ça marche (ce qui est possible :D)

Ok, mais est-ce que tu es sûr que :

  • la variable de session est bien :user_id ?
  • tu as bien chargé des fixtures d’users ou mocké l’objet User pour
    que
    find réponde quelque chose de valable ?


Michel B.

On Aug 24, 2:39 pm, “Michel B.” [email protected]
wrote:

Michel B.
Oui mais là je suis dans les tests pas dans le controleur et j’ai cru
comprendre que pour simuler les paramètres de session on les passait
comme je l’ai fait.

On Aug 24, 2:50 pm, “Michel B.” [email protected]
wrote:

Ok, mais est-ce que tu es sûr que :

  • la variable de session est bien :user_id ?

Oui

  • tu as bien chargé des fixtures d’users ou mocké l’objet User pour que
    find réponde quelque chose de valable ?

Oui

Pas d’idée alors.

Bien entendu, si tu envoyais le message d’erreur entier ce serait
peut-être
un peu plus facile…


Michel B.

Le mess

On Aug 24, 3:04 pm, “Michel B.” [email protected]
wrote:

Pas d’idée alors.

En tout cas merci d’avoir pris le temps de lire mon post.

Bien entendu, si tu envoyais le message d’erreur entier ce serait peut-être
un peu plus facile…

Je veux bien mais comme c’est la trace de l’appli et que ça fait une
cinquantaine de lignes, je n’avais mis que la première ligne. La
voici.

<"Application Trace |

Framework Trace |

Full Trace


  app/controllers/buildings_controller.rb:41:in `create'

/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:1158:in send' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:1158:in perform_action_without_filters’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:697:in call_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:689:in perform_action_without_benchmark’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in perform_action_without_rescue' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ benchmarking.rb:68:in perform_action_without_rescue’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
rescue.rb:199:in perform_action_without_caching' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ caching.rb:678:in perform_action’
/Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/
connection_adapters/abstract/query_cache.rb:33:in cache' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ query_cache.rb:8:in cache’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
caching.rb:677:in perform_action' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:524:in send’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:524:in process_without_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:685:in process_without_session_management_support’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
session_management.rb:123:in process_without_test' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ test_process.rb:15:in process’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:388:in process' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ integration.rb:279:in process’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
integration.rb:177:in post' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ integration.rb:397:in send!’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
integration.rb:397:in post' test/integration/building_creation_test.rb:69:in test_building_address_form’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
integration.rb:547:in `run’
test/integration/building_creation_test.rb:67

  /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/

ruby/1.8/benchmark.rb:293:in measure' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:171:in handle_request’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:115:in dispatch' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:126:in dispatch_cgi’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:9:in dispatch' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testcase.rb:78:in send
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testcase.rb:78:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:34:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:33:in each' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:33:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:34:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:33:in each’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:33:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/ui/testrunnermediator.rb:46:in run_suite’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/ui/console/testrunner.rb:67:in start_mediator' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/ui/console/testrunner.rb:41:in start’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/ui/testrunnerutilities.rb:29:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/autorunner.rb:216:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/autorunner.rb:12:in `run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit.rb:278

  app/controllers/buildings_controller.rb:41:in `create'

/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:1158:in send' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:1158:in perform_action_without_filters’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:697:in call_filters' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:689:in perform_action_without_benchmark’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in perform_action_without_rescue' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/benchmark.rb:293:in measure’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
benchmarking.rb:68:in perform_action_without_rescue' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ rescue.rb:199:in perform_action_without_caching’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
caching.rb:678:in perform_action' /Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ connection_adapters/abstract/query_cache.rb:33:in cache’
/Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/
query_cache.rb:8:in cache' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ caching.rb:677:in perform_action’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
base.rb:524:in send' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:524:in process_without_filters’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
filters.rb:685:in process_without_session_management_support' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ session_management.rb:123:in process_without_test’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
test_process.rb:15:in process' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:388:in process’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:171:in handle_request' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:115:in dispatch’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
dispatcher.rb:126:in dispatch_cgi' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:9:in dispatch’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
integration.rb:279:in process' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ integration.rb:177:in post’
/Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/
integration.rb:397:in send!' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ integration.rb:397:in post’
test/integration/building_creation_test.rb:69:in
test_building_address_form' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testcase.rb:78:in send
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testcase.rb:78:in run' /Library/Ruby/Gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ integration.rb:547:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:34:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:33:in each’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:33:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:34:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/testsuite.rb:33:in each' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/testsuite.rb:33:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/ui/testrunnermediator.rb:46:in run_suite' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/ui/console/testrunner.rb:67:in start_mediator’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/ui/console/testrunner.rb:41:in start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/ui/testrunnerutilities.rb:29:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit/autorunner.rb:216:in run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ 1.8/test/unit/autorunner.rb:12:in run’
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
1.8/test/unit.rb:278
test/integration/building_creation_test.rb:67">.

Je crois que j’ai le début d’une idée.

Selon la trace, l’erreur appraît dans la méthode
“perform_action_without_filters” de AC::B, et j’ai comme l’intuition que
la
méthode “current_user” repose sur le pré-caching d’une variable interne
(par
exemple @current_user) exécuté dans un filtre.

Forcément, si les filtres ne sont pas exécutés, @current_user n’est pas
précaché, et la méthode current_user renvoie une nil tout chelou.

En général, j’ai une préférence pour éviter de faire des précaches en
filtres, je trouve ça beaucoup moins élégant que de cacher à la volée
dans
le contrôleur principal, quelque chose du genre :

class Application < AC::B

def current_user

end


end

Merci,

Je vais regarder de ce côté.
current_user est provient de restful_authentication et j’epère que je
n’aurai pas à modifier le plugin.

Je vous tiens au courant dès que j’ai
avancé.

Oups, j’ai fait une faute de manip avec mon client mail. Je termine
correctement.

class Application < AC::B

helper_method :current_user
def current_user
@current_user ||= User.find session[:current_user_id]
@current_user
end

end

Ca a l’avantage de ne charger les données que si elles sont demandées
(donc
utiles), de mettre en cache pour ne pas exécuter plusieurs fois la même
requête inutilement, et d’être accessible par les contrôleurs, les vues
et
les helpers.


Michel B.

Sauf erreur de ma part, le mixin de restful_authentication est effectué
sur
AC::B avant que ton contrôleurs d’application ne soit déclarer, donc il
suffit d’ajouter une méthode current_user propre dans ton contrôleur,
elle
surclassera automatiquement celle du plugin.

Tiens-nous au courant des essais.

Le 24 août 2008 16:41, Tranquiliste [email protected] a écrit :


Michel B.