Le code fonctionne mais le test échoue
-
05-07-2019 - |
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
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