2009-07-29 6 views
0

J'ai un test qui échoue bien que l'opération fonctionne réellement lorsque je le teste dans le navigateur. Quelque chose ne va pas avec mon test, ressemble à. J'utilise Shoulda et les luminaires.Le code fonctionne mais le test échoue

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 en cours de 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 
+0

"Le code fonctionne mais le test échoue". C'est exactement ma première pensée quand l'équipe de test appelle: P – nik

+0

avec quoi a.street1 revient-il? – Steven

+0

Juste pour clarifier mon dernier commentaire; Je me demande ce qu'apporte a.street1, pas seulement ce que l'hypothèse est. Comme quelqu'un qui teste, l'impression de la valeur attendue et la valeur réelle d'un test peut être très perspicace. – Steven

Répondre

2

Je ne vois pas params [:] adresse spécifiés dans les paramètres que vous passer à votre action dans le test. Il me semble que ce devrait être:

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

Je soupçonnez que votre champ d'adresse street1 est nommé correctement dans votre formulaire comme address[street1] qui est la raison pour laquelle il travaille via le navigateur.

+0

Oui, c'est ça. Merci. – Ethan

Questions connexes