2011-03-21 3 views
1

Je reçois cette erreur lors de l'exécution des tests unitaires (en utilisant le module Test :: Unit inclus dans Ruby/Rails) qui appellent une méthode qui utilise une fonction SettingsLogic:SettingsLogic ne fonctionne pas lorsque les tests unitaires en cours d'exécution dans Rails 2.3

RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

Plus précisément, j'ai écrit un test unitaire afin de tester certaines méthodes dans mes modèles. Ces méthodes utilisent la fonctionnalité SettingsLogic mais il semble que quelque chose de mal se passe ici. Je lance une console de test et vérifie que la classe Settings est définie. Cependant, je ne peux pas accéder à la valeur de hachage de mes paramètres.

script/console test 
Loading test environment (Rails 2.3.10) 
DEPRECATION WARNING: require "activesupport" is deprecated and will be removed in Rails 3. Use require "active_support" instead. (called from /var/lib/gems/1.8/gems/activesupport-2.3.10/lib/activesupport.rb:2) 
>> Settings 
=> Settings 
>> Settings.blah 
RuntimeError: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 
    from (erb):32 
>> exit 

Alors que dans l'environnement de développement que je reçois:

script/console 
Loading development environment (Rails 2.3.10) 
>> Settings 
=> Settings 
>> Settings.blah 
=> {"gadget_type"=>{"alarm_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>5, "rows_per_page"=>100}, "text"=>{"_id"=>2}, "current_state_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>1, "rows_per_page"=>10}, "column_based_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>6, "rows_per_page"=>100, "related_states"=>{"unit"=>17, "description"=>49}}, "entity_history_table"=>{"max_printable_rows"=>200, "max_visible_rows"=>14, "_id"=>4, "rows_per_page"=>100}, "chart"=>{"_id"=>3}, "access_type"=>{"url"=>1, "file"=>2}}} 
>> exit 

J'exécution des tests manuellement, c.-à-pas avec le test de coupe, mais avec ruby unit/my_model_test.rb

Le modèle settings.rb est le suivant:

class Settings < Settingslogic 
    source "#{Rails.root}/config/application.yml" 
    namespace Rails.env 
end 

Et le fichier de paramètres application.yml:

defaults: &defaults 
    blah: 
    gadget_type: 
     access_type: 
     url: 1 
     file: 2 
     current_state_table: 
     _id: 1 
     max_visible_rows: 14 
     rows_per_page: 10 
     max_printable_rows: 200 
     text: 
     _id: 2 
     chart: 
     _id: 3 
     entity_history_table: 
     _id: 4 
     max_visible_rows: 14 
     rows_per_page: 100 
     max_printable_rows: 200 
     alarm_history_table: 
     _id: 5 
     max_visible_rows: 14 
     rows_per_page: 100 
     max_printable_rows: 200 
     column_based_history_table: 
     _id: 6 
     max_visible_rows: 14 
     rows_per_page: 100 
     max_printable_rows: 200 
     related_states: 
      description: <%= Property.find_by_name('description').id %> 
      unit: <%= Property.find_by_name('units').id %> 

development: 
    <<: *defaults 

test: 
    <<: *defaults 

production: 
    <<: *defaults 

RUBY VERSION: Ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-linux]
RAILS VERSION: 2.3.10
REGLAGES LOGIC: 2.0.6
Merci !!

Répondre

0

FIXES

Le problème a été le rubis intégré dans le YAML:

Property.find_by_name('description').id 

Je n'ai pas les accessoires de propriétés donc pour cette raison, il a échoué.

Questions connexes