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 !!