Question

J'ai un test qui échoue même si l'opération fonctionne réellement lorsque je le teste dans le navigateur. Quelque chose ne va pas avec mon test, on dirait.

J'utilise Shoulda et des fixtures.

require 'test_helper'

class AddressesControllerTest < ActionController::TestCase
  context 'on PUT to :update' do
    setup do
      put(:update, {
          :id => addresses(:mary_publics_address).id,
          :street1 => '123 Now St.'
        }, { :user_id => users(:stan).id})
    end
    should 'update the Address' do
      a = Address.find(addresses(:mary_publics_address).id)
      assert(a.street1 == '123 Now St.', 'Attribute did not get updated.')
    end
  end
end

Échec avec "L'attribut n'a pas été mis à jour".

Voici le code du contrôleur testé:

class AddressesController < ApplicationController
  def update
    @address = Address.find(params[:id])
    @address.update_attributes!(params[:address])
    render(:text => "Address with ID #{params[:id]} updated")
  end
end
Était-ce utile?

La solution

Je ne peux pas voir un paramètre [: adresse] spécifié dans les paramètres que vous transmettez à votre action dans le test. Il me semble que cela devrait être:

put(:update, {
        :id => addresses(:mary_publics_address).id,
        :address => { :street1 => '123 Now St.' }
      }, { :user_id => users(:stan).id})

Je soupçonne que votre champ d'adresse street1 est correctement nommé dans votre formulaire sous le nom address [street1] , raison pour laquelle il fonctionne via le navigateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top