0

在 ruby​​ on rails 项目 [1] 中有很多 rake 测试失败,都出现相同的错误(无法将 nil 转换为字符串),我不知道为什么会发生这种情况,也不知道我应该如何调试它.

例如,这是 rake 测试的第一个 tracebak(我在消息 [2] 的末尾附上了完整的 rake 测试回溯)。

Error:
test_update(Admin::BazarDistrictsControllerTest):
TypeError: can't convert nil into String
    /usr/lib/ruby/1.9.1/psych.rb:154:in `parse'
    /usr/lib/ruby/1.9.1/psych.rb:154:in `parse_stream'
    /usr/lib/ruby/1.9.1/psych.rb:125:in `parse'
    /usr/lib/ruby/1.9.1/psych.rb:112:in `load' 
    /srv/www/gamersmafia/current/app/models/users_skill.rb:178:in `role_data_yaml'
    /srv/www/gamersmafia/current/app/models/alert.rb:200:in `block in update_pending_alerts'
    /srv/www/gamersmafia/current/app/models/alert.rb:198:in `each'
    /srv/www/gamersmafia/current/app/models/alert.rb:198:in `update_pending_alerts'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/performable_method.rb:26:in `perform'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:95:in `block in invoke_job'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `call'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `block in initialize'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `call'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `execute'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:38:in `run_callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:92:in `invoke_job'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:37:in `block in enqueue'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:36:in `tap'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/backend/base.rb:36:in `enqueue'
    /usr/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.5/lib/delayed/message_sending.rb:13:in `method_missing'
    /srv/www/gamersmafia/current/app/models/alert.rb:182:in `block in update_pending_alerts'
    /srv/www/gamersmafia/current/app/models/alert.rb:180:in `each'
    /srv/www/gamersmafia/current/app/models/alert.rb:180:in `update_pending_alerts'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:460:in `_run__1673722312823048322__save__808729243992924512__callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/callbacks.rb:264:in `create_or_update'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/persistence.rb:84:in `save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/validations.rb:50:in `save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/attribute_methods/dirty.rb:22:in `save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:259:in `block (2 levels) in save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:208:in `transaction'
    /usr/lib/ruby/gems/1.9.1/gems/deadlock_retry-1.2.0/lib/deadlock_retry.rb:31:in `transaction_with_deadlock_handling'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:259:in `block in save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/transactions.rb:258:in `save'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/persistence.rb:45:in `create'
    /srv/www/gamersmafia/current/app/models/bazar_district.rb:158:in `update_single_person_staff'
    /srv/www/gamersmafia/current/app/models/bazar_district.rb:83:in `update_don'
    /srv/www/gamersmafia/current/app/controllers/admin/bazar_districts_controller.rb:43:in `update'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/abstract_controller/base.rb:167:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/rendering.rb:10:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/abstract_controller/callbacks.rb:18:in `block in process_action'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:503:in `block in _run__1141341086633682237__process_action__2809844012775858444__callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:215:in `block in _conditional_callback_around_5310'
    /srv/www/gamersmafia/current/app/controllers/application_controller.rb:233:in `block (2 levels) in gm_process'
    /srv/www/gamersmafia/current/app/controllers/application_controller.rb:232:in `catch'
    /srv/www/gamersmafia/current/app/controllers/application_controller.rb:232:in `block in gm_process'
    /usr/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
    /srv/www/gamersmafia/current/app/controllers/application_controller.rb:231:in `gm_process'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:214:in `_conditional_callback_around_5310'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:469:in `_run__1141341086633682237__process_action__2809844012775858444__callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/abstract_controller/callbacks.rb:17:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/rescue.rb:29:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `block in instrument'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.2.12/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/abstract_controller/base.rb:121:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/abstract_controller/rendering.rb:45:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/metal/testing.rb:17:in `process_with_new_base_test'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/test_case.rb:473:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/test_case.rb:49:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_controller/test_case.rb:395:in `post'
    /srv/www/gamersmafia/current/test/functional/admin/bazar_districts_controller_test.rb:42:in `block in <class:BazarDistrictsControllerTest>'

我有超过 200 次测试,总共有 1448 次测试的错误。

问题是,我必须从哪里开始调试它?为什么我在 +90% 的测试中得到相同的错误?

[1] https://github.com/gamersmafia/gamersmafia

[2] https://dl.dropbox.com/u/42306424/salida_rake.txt

4

2 回答 2

0

在调试的情况下。我建议使用 gem 'pry-rails'。只需捆绑这个 gem 并将 'binding.pry' 添加到失败的测试中。它将打开包含测试中所有变量的控制台,因此您可以手动检查它。我希望它可以帮助您找出问题所在。

于 2013-03-28T13:23:25.227 回答
-1

这可能是 Cucumber 版本的问题之一。

您可以通过将 cucumber-rails 升级到最新版本来解决此问题。只需编辑您的 Gemfile 即可显示:

gem 'cucumber-rails', '>= 1.1.1'或更新版本

当我得到相同的错误时,它解决了我的错误。

在你的情况下,它指出delayed_job gem

如果您正在使用bundler尝试在脚本或 rake 任务前加上“ bundle exec”,例如

bundle exec script/delayed_job -n 2 start 

并尝试!!!!

于 2013-03-28T12:22:25.233 回答