Ouverture de session

Commentaires récents

Syndication
Flux XML

tests fonctionnels

tests fonctionnels
Posté par foudfou le Mercredi, 9 Avril, 2008 - 4:07am. Ruby on Rails 2ème édition - Eyrolles

Bonjour,

Je suis coincé depuis quelques jours dans le chapitre sur les tests (Ruby en Rails 2e éd., ou "AWDWR2").

> ruby ./test/functional/login_controller_test.rb
Loaded suite ./test/functional/login_controller_test
Started
Finished in 1.382436 seconds.

  1) Error:
test_correct_login(LoginControllerTest):
TypeError: can't convert Hash into String
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb:115:in `=~'
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb:115:in `assert_redirected_to'
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb:114:in `collect'
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb:114:in `assert_redirected_to'
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions.rb:54:in `clean_backtrace'
    /home/foudil/src/ror/depot/vendor/rails/actionpack/lib/action_controller/assertions/response_assertions.rb:54:in `assert_redirected_to'
    ./test/functional/login_controller_test.rb:25:in `test_correct_login'
    /home/foudil/src/ror/depot/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/testing/default.rb:7:in `run'

Voici mon fichier de test en question :

require File.dirname(__FILE__) + '/../test_helper'

class LoginControllerTest < ActionController::TestCase

  def test_index
    get :index
    if User.count == 0
      assert_redirected_to :action => "add_user"
      assert_equal "Veuillez créer le premier utilisateur", flash[:notice]
    else
      assert_redirected_to :action => "login"
      assert_equal "Veuillez vous connecter", flash[:notice]
    end
  end

  def test_index_with_user
    get :index, {}, { :user_id => users(:dave).id }
    assert_response :success
    assert_template "index"
  end

  def test_correct_login
    dave = users(:dave)
    post :login, :name => dave.name, :password => 'secret'
    assert_redirected_to :action => "index"
    assert_equal dave.id, session[:user_id]
  end

  def test_truth
    assert true
  end

end

Contrairement au msg d'erreur, je suspecte que le problème vient de l'instruction "post". Je me demande si c'est la bonne qui est appellée (il en existe 4 d'après la doc).

Je signale que :
- je sais qu'il est conseillé de suivre le livre en Rails 1.2
- le code complet de login_controller_test.rb contenu dans le livre produit la même erreur

Suis-je le seul à être allé jusqu'à ce chapitre en Rails 2.0 ?



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
assert_redirect_to terrassé par ssl_requirement
Auteur: 
foudfou
Date: 
Mer, 09/04/2008 - 17:32

L'origine du problème vient de ssl_requirement, utilisé dans le controller associé (LoginController). ssl_required redirige vers la même URI, mais en https://. Ce que ne sait visiblement pas gérer assert_redirect_to.

Ce qui me conduit à une nouvelle question :-) :
comment tester les redirection vers une URI en https dans les tests fonctionnels ?

Informations complémentaires ci-dessous :

#...
class LoginController < ApplicationController

  layout "products"
  before_filter :authorize, :except => :login
  ssl_required :login, :add_user
#...
  def login
    session[:user_id] = nil
    if request.post?
      user = User.authenticate(params[:name], params[:password])
      if user
        session[:user_id] = user.id
        uri = session[:original_uri]
        session[:original_uri] = nil
        redirect_to(uri || {  :action => "index" })
      else
        flash[:notice] = "Nom de l'utilisateur ou mot de passe
incorrect"
      end
    end
  end
#...

@request.headers:

REQUEST_URI: /login/login?name=dave&password=secret
SERVER_PORT: 80
REQUEST_METHOD: POST

@request.response:

Status: 302 Found
X-Runtime: 0.00129
Location: https://test.host/login/login?name=dave&password=secret
type: text/html; charset=utf-8
cookie:
Cache-Control: no-cache
Content-Length: 121


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 32 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]