ruby-on-rails – Rails – 测试夹具错误NoMethodError:未定义的方法`type’为nil:NilClass

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails – 测试夹具错误NoMethodError:未定义的方法`type’为nil:NilClass前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
运行测试时,我有一个问题,它使用模型之间的关联.

这是我得到的错误,一旦我运行rake测试:

  1. ERROR["test_truth",SevenPortfolioTest,0.005154775]
  2. test_truth#SevenPortfolioTest (0.01s)
  3. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  4.  
  5.  
  6. ERROR["test_should_destroy_item_video",SevenPortfolio::ItemVideosControllerTest,0.008887804]
  7. test_should_destroy_item_video#SevenPortfolio::ItemVideosControllerTest (0.01s)
  8. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  9.  
  10.  
  11. ERROR["test_should_get_index",0.011364416]
  12. test_should_get_index#SevenPortfolio::ItemVideosControllerTest (0.01s)
  13. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  14.  
  15.  
  16. ERROR["test_should_create_item_video",0.014584266]
  17. test_should_create_item_video#SevenPortfolio::ItemVideosControllerTest (0.01s)
  18. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  19.  
  20.  
  21. ERROR["test_should_get_new",0.017282812]
  22. test_should_get_new#SevenPortfolio::ItemVideosControllerTest (0.02s)
  23. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  24.  
  25.  
  26. ERROR["test_should_update_item_video",0.019729858]
  27. test_should_update_item_video#SevenPortfolio::ItemVideosControllerTest (0.02s)
  28. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  29.  
  30.  
  31. ERROR["test_should_get_edit",0.022365633]
  32. test_should_get_edit#SevenPortfolio::ItemVideosControllerTest (0.02s)
  33. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  34.  
  35.  
  36. ERROR["test_should_destroy_item",SevenPortfolio::ItemsControllerTest,0.025860205]
  37. test_should_destroy_item#SevenPortfolio::ItemsControllerTest (0.03s)
  38. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  39.  
  40.  
  41. ERROR["test_should_get_edit",0.030867796]
  42. test_should_get_edit#SevenPortfolio::ItemsControllerTest (0.03s)
  43. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  44.  
  45.  
  46. ERROR["test_should_show_item",0.036687105]
  47. test_should_show_item#SevenPortfolio::ItemsControllerTest (0.04s)
  48. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  49.  
  50.  
  51. ERROR["test_should_update_item",0.040130774]
  52. test_should_update_item#SevenPortfolio::ItemsControllerTest (0.04s)
  53. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  54.  
  55.  
  56. ERROR["test_should_create_item_with_video",0.042776553]
  57. test_should_create_item_with_video#SevenPortfolio::ItemsControllerTest (0.04s)
  58. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  59.  
  60.  
  61. ERROR["test_should_get_index",0.045301694]
  62. test_should_get_index#SevenPortfolio::ItemsControllerTest (0.05s)
  63. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  64.  
  65.  
  66. ERROR["test_should_get_new",0.048094189]
  67. test_should_get_new#SevenPortfolio::ItemsControllerTest (0.05s)
  68. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass
  69.  
  70.  
  71. ERROR["test_should_create_item_with_gallery",0.051019403]
  72. test_should_create_item_with_gallery#SevenPortfolio::ItemsControllerTest (0.05s)
  73. NoMethodError: NoMethodError: undefined method `type' for nil:NilClass

我正在测试轨道引擎.这是我的装置:

  1. # test/fixtures/seven_portfolio/items.yml
  2. item_one:
  3. description: item one description
  4. finished_at: <%= 7.days.ago %>
  5. is_featured: true
  6. item_type: 0
  7.  
  8. item_two:
  9. description: item two description
  10. finished_at: <%= 6.days.ago %>
  11. is_featured: false
  12. item_type: 1
  13.  
  14.  
  15. # test/fixtures/seven_gallery/galleries.yml
  16. gallery_one:
  17. title: seven_gallery_gallery_one_title
  18. item: item_one
  19.  
  20. # test/fixtures/seven_gallery/photos.yml
  21. photo_one:
  22. caption: photo_one_caption
  23. gallery: gallery_one
  24.  
  25. # test/fixtures/seven_portfolio/item_videos.yml
  26. one:
  27. item: item_one

例如,当我删除item:item_one和类似的关联行.测试效果很好


编辑

这是回溯

  1. Command Failed with status (1): [ruby -I"lib:lib:test" "/home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/rake_test_loader.rb" "test/**/*_test.rb" ]
  2.  
  3. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:108:in `block (3 levels) in define'
  4. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:57:in `call'
  5. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:57:in `sh'
  6. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:37:in `sh'
  7. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:96:in `ruby'
  8. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:37:in `ruby'
  9. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:104:in `block (2 levels) in define'
  10. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:58:in `verbose'
  11. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:100:in `block in define'
  12. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:240:in `call'
  13. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
  14. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:235:in `each'
  15. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
  16. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
  17. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
  18. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
  19. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
  20. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
  21. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
  22. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `each'
  23. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
  24. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
  25. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
  26. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
  27. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
  28. /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:75:in `run'
  29. /home/rafael/.rbenv/versions/2.2.0/bin/rake:33:in `<main>'

编辑

项目类:

  1. module SevenPortfolio
  2. class Item < ActiveRecord::Base
  3. has_one :item_video,class_name:'SevenPortfolio::ItemVideo',foreign_key: "seven_portfolio_item_id"
  4. has_one :item_gallery,class_name: 'SevenGallery::Gallery',foreign_key: "seven_portfolio_item_id"
  5. accepts_nested_attributes_for :item_video,:item_gallery
  6.  
  7. before_save :process_type
  8.  
  9. def process_type
  10. self.build_item_video if self.item_type == 0
  11. self.build_item_gallery if self.item_type == 1
  12. end
  13.  
  14. def type_content
  15. self.item_gallery if self.item_type == 0
  16. self.item_video if self.item_type == 1
  17. end
  18. end
  19. end

和画廊类:

  1. class SevenGallery::Gallery < ActiveRecord::Base
  2. include SevenGallery::Concerns::Gallery
  3. belongs_to :item,:class_name => 'SevenPortfolio::Item'
  4. end

编辑
这是schema.rb文件

  1. ActiveRecord::Schema.define(version: 20150414145951) do
  2.  
  3. create_table "seven_gallery_galleries",force: :cascade do |t|
  4. t.string "title",limit: 255
  5. t.datetime "created_at",null: false
  6. t.datetime "updated_at",null: false
  7. t.integer "seven_portfolio_item_id",limit: 4
  8. end
  9.  
  10. add_index "seven_gallery_galleries",["seven_portfolio_item_id"],name: "index_seven_gallery_galleries_on_seven_portfolio_item_id",using: :btree
  11.  
  12. create_table "seven_gallery_photos",force: :cascade do |t|
  13. t.string "caption",limit: 255
  14. t.string "image",limit: 255
  15. t.integer "seven_gallery_gallery_id",limit: 4
  16. t.datetime "created_at",null: false
  17. t.boolean "is_new",limit: 1,default: true
  18. t.boolean "is_featured",default: false
  19. t.text "description",limit: 65535
  20. t.string "alt",limit: 255
  21. t.integer "position",limit: 4,default: 0
  22. end
  23.  
  24. add_index "seven_gallery_photos",["seven_gallery_gallery_id"],name: "index_seven_gallery_photos_on_seven_gallery_gallery_id",using: :btree
  25.  
  26. create_table "seven_portfolio_item_videos",force: :cascade do |t|
  27. t.string "url",limit: 255
  28. t.text "description",limit: 65535
  29. t.string "title",limit: 255
  30. t.integer "seven_portfolio_item_id",null: false
  31. end
  32.  
  33. add_index "seven_portfolio_item_videos",name: "index_seven_portfolio_item_videos_on_seven_portfolio_item_id",using: :btree
  34.  
  35. create_table "seven_portfolio_items",force: :cascade do |t|
  36. t.datetime "created_at",null: false
  37. t.text "description",limit: 65535
  38. t.date "finished_at"
  39. t.boolean "is_featured",default: false
  40. t.integer "item_type",default: 0
  41. end
  42.  
  43. add_foreign_key "seven_gallery_galleries","seven_portfolio_items",on_delete: :cascade
  44. add_foreign_key "seven_gallery_photos","seven_gallery_galleries",on_delete: :cascade
  45. add_foreign_key "seven_portfolio_item_videos",on_delete: :cascade
  46. end

解决方法

在我的开发环境中迁移和回滚几次后,我遇到了相同的错误.这与“_type”列有关.

唯一为我修复的是测试数据库删除/创建:

  1. bundle exec rake db:reset RAILS_ENV=test

在做这个之前,请确信你的schema.rb状况良好.

猜你在找的Ruby相关文章