3 votes

assert_redirected_to dans Rails Testing

J'essaie d'effectuer quelques tests sur le contrôleur de mes clients. Lorsque je teste manuellement le contrôleur, tout fonctionne bien, mais lorsque je fais des tests d'intégration écrits sur celui-ci, j'obtiens une erreur. Voici mon code de test :

context "non-empty Customer model" do
  setup do
    @customer = Customer.first || Customer.create(:name => "John", :address => "123 Street Cool", :telephone => "01484349361", :email => "johnsmith@world.com")
  end

  should "be able to create" do
    get "/customers/new"
    assert_response :success
    post "/customers/create", :post => @customer
    # assert_response :success
    assert_redirected_to "/customers/list"
  end

Et l'erreur que je reçois est sur la ligne assert_redirected_to et elle dit :

Le bloc devait retourner une valeur vraie.

Voici le code de mon contrôleur pour les actions nouvelles/créées :

  def new
    @customer = Customer.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @customer }
    end
  end

  def create
    # Instantiate a new object using form params
    @customer = Customer.new(params[:customer])
    # Save the object
    if @customer.save
      # If save succeeds, redirect to the list action
      flash[:notice] = "Customer created."
      redirect_to(:action => 'list')
    else
      # If save fails, redisplay the form so user can fix problems
      render('new')
    end
  end

Comment faire pour que les tests fonctionnent ?

4voto

Unixmonkey Points 7947

Il semble que vous envoyez les mauvaises informations comme paramètres.

should "be able to create" do
  get "/customers/new"
  assert_response :success
  post "/customers/create", :customer => @customer.attributes
  assert_redirected_to "/customers/list"
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X