Bonjour,
J'ai commencer à m'interesser à la partie test prévu par rails et j'arrive déjà à effectuer plusieurs tests sympathiques. Par contre, j'ai créer un formulaire en plusieurs étapes et j'utilise la session pour passer à travers les pages. C'est la que j'ai des problèmes : Je ne sais pas comment "remplir" la session avec les valeurs de chaque parties pour simuler la validation du formulaire entier.
Pour une meilleur compréhension voici mon code de test
et les méthodes concernées de mon controlleur account
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 require File.dirname(__FILE__) + '/../test_helper' require 'account_controller' # Re-raise errors caught by the controller. class AccountController; def rescue_action(e) raise e end; end class AccountControllerTest < Test::Unit::TestCase # Be sure to include AuthenticatedTestHelper in test/test_helper.rb instead # Then, you can remove it from this and the units test. include AuthenticatedTestHelper fixtures :internautes def setup @controller = AccountController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end def test_1_sould_login_and_redirect puts "\n ___test_1_should_login_and_redirect" post :login,:login=>'quentin',:password=>'test' assert session[:internaute] assert_response :redirect end def test_2_should_fail_login_and_not_redirect puts "\n ___test_2_should_fail_login_and_not_redirect" post :login, :login => 'quentin', :password => 'bad password' assert_nil session[:internaute] assert_response :success end def test_3_should_require_login_on_signup puts "\n ___test_3_should_require_login_on_signup" assert_no_difference Internaute, :count do wizard_client("1",:login => nil) assert assigns('internaute').errors.on('login') assert_response :success end end def test_4_should_require_password_on_signup puts "\n ___test_4_should_require_password_on_signup" assert_no_difference Internaute, :count do wizard_client("1",:password => nil) assert assigns('internaute').errors.on('password') assert_response :success end end def test_5_create_client puts "\n ___test_5_create_client" session["internaute"] = {'login' => 'quire', 'email' => 'quire@example.com','password' => 'quire', 'password_confirmation' => 'quire'} session["coordonnees"] = {'ville'=>'town', 'code_postal'=>'56466', 'voie'=>'rue principale','pays'=>'FR','numero'=>'23'} create_client assert_response :redirect end protected def wizard_client(partie,options = {}) post :signup_client, :partie=>partie,:commit=>"1",'internaute' => { 'login' => 'quire', 'email' => 'quire@example.com', 'password' => 'quire', 'password_confirmation' => 'quire' }.merge(options) end def create_client() #open_session do |internaute,coordonnees| #@response.session #@response.session["internaute"] = {'login' => 'quire', 'email' => 'quire@example.com','password' => 'quire', 'password_confirmation' => 'quire'} #@response.session["coordonnees"] = {'ville'=>'town', 'code_postal'=>'56466', 'voie'=>'rue principale','pays'=>'FR','numero'=>'23'} post :signup_client, :partie=>"3",:commit=>"something" #end end end
Comme vous avez pu le constater j'ai essayer plusieurs moyens pour "forcer" la session mais rien à faire, j'ai une erreur car ma session est nulle quand j'éxécute le code de mon controlleur... ( la ligne ou je récupère l'id dans la session me fait une erreur cannot get nil.[id] ou quelque chose du genre ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 def signup_client #pour les retours en arri�re @internaute = Internaute.new(session['internaute']) if session['internaute'] @coordonnees= Coordonnees.new(session['coordonnees']) if session['coordonnees'] #--------------------------- @parties_liste = ["Generalites","Coordonees","Recapitulatif"] @parties_text = [] partie = params[:partie].to_i() partie = 1 if partie == 0 if params[:commit] case partie when 1 @internaute = Internaute.new(params['internaute']) valid = Internaute.isvalid?(@internaute) if valid == true session['internaute'] = params['internaute'] redirect_to :action=>"signup_client",:controller=>"account",:partie=>2 end when 2 @coordonnees = Coordonnees.new(params['coordonnees']) valid = Coordonnees.isvalid?(@coordonnees) if valid == true session['coordonnees'] = params['coordonnees'] redirect_to :action=>"signup_client",:controller=>"account",:partie=>3 end when 3 @client = Internaute.new(session['internaute']) @client.role = "ClientCL" session['coordonnees']['id']=@client.id session['coordonnees'][:id]=@client.id @client.coordonnees =Coordonnees.new(session['coordonnees']) @client.save() #remise à zero de la session session['internaute'] = session['coordonnees'] = nil #redirection flash[:notice]="compte creer aves succes" redirect_to :action=>"login",:controller=>"account" end
Voila donc, comment créer des hash "internaute" et une valeur "coordonnees" stockés dans la session dans ce cas la ? Merci d'avance.
ps : si je ne fait pas session={} j'ai une erreur car il pense que session est un objet de type Array (et donc il y a une erreur cannot converte String to Integer)..bizarre non ? session devrait déjà exister...
Partager