【问题标题】:All rails test fail with error "no implicit conversion of nil into String"所有 rails 测试都失败并出现错误“没有将 nil 隐式转换为字符串”
【发布时间】:2016-11-17 10:39:12
【问题描述】:

我的测试过去可以工作,但现在它们都失败了,并出现以下错误和堆栈跟踪:

TypeError: no implicit conversion of nil into String
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in `quote_ident'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/utils.rb:24:in `quoted'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:31:in `quote_table_name'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:738:in `column_definitions'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:186:in `columns'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:750:in `column_names'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:742:in `timestamp_column_names'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:627:in `block in table_rows'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:621:in `each'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:621:in `map'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:621:in `table_rows'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:526:in `block (3 levels) in create_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:524:in `each'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:524:in `block (2 levels) in create_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:523:in `block in create_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/postgresql/referential_integrity.rb:17:in `disable_referential_integrity'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:508:in `create_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:979:in `load_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:941:in `setup_fixtures'
    vendor/bundle/gems/activerecord-4.2.5.1/lib/active_record/fixtures.rb:826:in `before_setup'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:105:in `block (3 levels) in run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:204:in `capture_exceptions'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:104:in `block (2 levels) in run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:255:in `time_it'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:103:in `block in run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:348:in `on_signal'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:275:in `with_info_handler'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest/test.rb:102:in `run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:799:in `run_one_method'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:322:in `run_one_method'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:310:in `block (2 levels) in run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:309:in `each'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:309:in `block in run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:348:in `on_signal'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:335:in `with_info_handler'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:308:in `run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:158:in `block in __run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:158:in `map'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:158:in `__run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:135:in `run'
    vendor/bundle/gems/minitest-5.9.1/lib/minitest.rb:62:in `block in autorun'

我运行be rake db:drop && be rake db:create && be rake db:migrate && be rake db:schema:dump && be rake db:test:prepare 以确保我的数据库是干净的(其中bebundle exec 的别名)

我怎样才能让我的测试再次正确运行?

编辑:如果您不赞成,请告诉我如何改进我的问题。

【问题讨论】:

    标签: ruby-on-rails testing


    【解决方案1】:

    我解决了我的问题。我添加了一个抽象模型:

    class AbstractModel < ActiveRecord::Base
      self.abstract_class = true
    
      # some methods ...
    end
    

    通过删除我的装置 test/fixtures/abstract_model.yml 中自动生成的文件,我的测试再次成功。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2019-03-11
      • 2014-09-17
      相关资源
      最近更新 更多