IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Test functionals et session


Sujet :

Ruby on Rails

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Test functionals et session
    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
    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
    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
     
    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
    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 ).


    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...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    pfff, toujours des blems de sessions et dans mes tests d'intégration cette fois -ci

    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
    require "#{File.dirname(__FILE__)}/../test_helper"
    
    class ReportViewerTest < ActionController::IntegrationTest
      # fixtures :your, :models
    	fixtures :internautes,:plannings
      
      # Replace this with your real tests.
      def test_login_as_artisan_and_view_calendar_then_logout
    		log_in_user("artisan")
    		assert session[:internaute]
    		    
    			head "mon_planning",session #,{"session"=>session,:onglet=>"1"} #,session,:onglet=>"1" #,:session=>session
    			assert_response 500
    			#get "fok/it"
    			#assert_response 404
    		assert session[:internaute]	
    		log_out_user
    		assert_nil session[:internaute]
      end
      
      
      
      
      private
    	def log_in_user(internaute)
    		post "account/login",:login => internautes(internaute).login , :password => internautes(internaute).login #:login => "artisan", :password => "artisan"
    		
    		assert_response :redirect
    		follow_redirect!
    		assert_response :success
    	end
    	
    	def log_out_user
    		post "account/logout"
    		assert_response :redirect
    		follow_redirect!
    		assert_response :success
    	end
      
      
    end
    J'ai une erreur genre "je ne connais pas de méthode lenght pour CGI:session", mes vérifications de session marchent et donc j'en conclue que le bloc en rouge la session existe...j'ai une erreur 500 en récupérant ma page (et pas 404 donc la page existe mais elle bug) et je suis certains que c'est encore un coup de ma session qui n'est pas valide dans la fonction get et donc forcément ca ne marche pas....donc encore une fois, comment peut on passer session en argument de get ou head ?

Discussions similaires

  1. Test sur la Session
    Par stratocasters dans le forum JSF
    Réponses: 0
    Dernier message: 08/10/2010, 18h50
  2. Test unitaire avec session en GWT
    Par durk dans le forum GWT et Vaadin
    Réponses: 8
    Dernier message: 07/06/2010, 16h00
  3. les tests sur les session
    Par rugal201 dans le forum Langage
    Réponses: 1
    Dernier message: 04/05/2010, 11h56
  4. Éviter les copier coller des tests sur les sessions
    Par frboyer dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2009, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo