title: Rails - Testing fixtures error NoMethodError: undefined method `type' for nil:NilClass
body: <p>I have a problem running tests that use fixtures with associations between models.</p>
  
  <p>Here's the error I get, as soon as I run <code>rake test</code>:</p>
  
  <pre><code>ERROR["test_truth", SevenPortfolioTest, 0.005154775]
   test_truth#SevenPortfolioTest (0.01s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_destroy_item_video", SevenPortfolio::ItemVideosControllerTest, 0.008887804]
   test_should_destroy_item_video#SevenPortfolio::ItemVideosControllerTest (0.01s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_index", SevenPortfolio::ItemVideosControllerTest, 0.011364416]
   test_should_get_index#SevenPortfolio::ItemVideosControllerTest (0.01s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_create_item_video", SevenPortfolio::ItemVideosControllerTest, 0.014584266]
   test_should_create_item_video#SevenPortfolio::ItemVideosControllerTest (0.01s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_new", SevenPortfolio::ItemVideosControllerTest, 0.017282812]
   test_should_get_new#SevenPortfolio::ItemVideosControllerTest (0.02s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_update_item_video", SevenPortfolio::ItemVideosControllerTest, 0.019729858]
   test_should_update_item_video#SevenPortfolio::ItemVideosControllerTest (0.02s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_edit", SevenPortfolio::ItemVideosControllerTest, 0.022365633]
   test_should_get_edit#SevenPortfolio::ItemVideosControllerTest (0.02s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_destroy_item", SevenPortfolio::ItemsControllerTest, 0.025860205]
   test_should_destroy_item#SevenPortfolio::ItemsControllerTest (0.03s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_edit", SevenPortfolio::ItemsControllerTest, 0.030867796]
   test_should_get_edit#SevenPortfolio::ItemsControllerTest (0.03s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_show_item", SevenPortfolio::ItemsControllerTest, 0.036687105]
   test_should_show_item#SevenPortfolio::ItemsControllerTest (0.04s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_update_item", SevenPortfolio::ItemsControllerTest, 0.040130774]
   test_should_update_item#SevenPortfolio::ItemsControllerTest (0.04s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_create_item_with_video", SevenPortfolio::ItemsControllerTest, 0.042776553]
   test_should_create_item_with_video#SevenPortfolio::ItemsControllerTest (0.04s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_index", SevenPortfolio::ItemsControllerTest, 0.045301694]
   test_should_get_index#SevenPortfolio::ItemsControllerTest (0.05s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_get_new", SevenPortfolio::ItemsControllerTest, 0.048094189]
   test_should_get_new#SevenPortfolio::ItemsControllerTest (0.05s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  
  
  ERROR["test_should_create_item_with_gallery", SevenPortfolio::ItemsControllerTest, 0.051019403]
   test_should_create_item_with_gallery#SevenPortfolio::ItemsControllerTest (0.05s)
  NoMethodError:         NoMethodError: undefined method `type' for nil:NilClass
  </code></pre>
  
  <p>I'm testing a rails engine. Here's my fixtures:</p>
  
  <pre><code># test/fixtures/seven_portfolio/items.yml
  item_one:
    description: item one description
    finished_at: &lt;%= 7.days.ago %&gt;
    is_featured: true
    item_type: 0
  
  item_two:
    description: item two description
    finished_at: &lt;%= 6.days.ago %&gt;
    is_featured: false
    item_type: 1
  
  
  # test/fixtures/seven_gallery/galleries.yml
  gallery_one:
    title: seven_gallery_gallery_one_title
    item: item_one
  
  # test/fixtures/seven_gallery/photos.yml
  photo_one:
    caption: photo_one_caption
    gallery: gallery_one
  
  # test/fixtures/seven_portfolio/item_videos.yml
  one:
    item: item_one
  </code></pre>
  
  <p>When, for example, I remove <code>item: item_one</code> and similar associations lines. The test works well.</p>
  
  <p>--
  <strong>EDIT</strong></p>
  
  <p>Here's the backtrace</p>
  
  <pre><code>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" ]
  
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:108:in `block (3 levels) in define'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:57:in `call'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:57:in `sh'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:37:in `sh'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils.rb:96:in `ruby'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:37:in `ruby'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:104:in `block (2 levels) in define'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/file_utils_ext.rb:58:in `verbose'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/testtask.rb:100:in `block in define'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:240:in `call'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:235:in `each'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `each'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
  /home/rafael/.rbenv/versions/2.2.0/lib/ruby/2.2.0/rake/application.rb:75:in `run'
  /home/rafael/.rbenv/versions/2.2.0/bin/rake:33:in `&lt;main&gt;'
  </code></pre>
  
  <hr>
  
  <p><strong>EDIT</strong></p>
  
  <p>Here's <code>Item</code> class:</p>
  
  <pre><code>module SevenPortfolio
    class Item &lt; ActiveRecord::Base
      has_one :item_video, class_name:'SevenPortfolio::ItemVideo', foreign_key: "seven_portfolio_item_id"
      has_one :item_gallery, class_name: 'SevenGallery::Gallery', foreign_key: "seven_portfolio_item_id"
      accepts_nested_attributes_for :item_video, :item_gallery
  
      before_save :process_type
  
      def process_type
        self.build_item_video if self.item_type == 0
        self.build_item_gallery if self.item_type == 1
      end
  
      def type_content
        self.item_gallery if self.item_type == 0
        self.item_video if self.item_type == 1
      end
    end
  end
  </code></pre>
  
  <p>And <code>Gallery</code> class:</p>
  
  <pre><code>class SevenGallery::Gallery &lt; ActiveRecord::Base
    include SevenGallery::Concerns::Gallery
    belongs_to :item, :class_name =&gt; 'SevenPortfolio::Item'
  end
  </code></pre>
  
  <hr>
  
  <p><strong>EDIT</strong>
  Here's the <code>schema.rb</code> file:</p>
  
  <pre><code>ActiveRecord::Schema.define(version: 20150414145951) do
  
    create_table "seven_gallery_galleries", force: :cascade do |t|
      t.string   "title",                   limit: 255
      t.datetime "created_at",                          null: false
      t.datetime "updated_at",                          null: false
      t.integer  "seven_portfolio_item_id", limit: 4
    end
  
    add_index "seven_gallery_galleries", ["seven_portfolio_item_id"], name: "index_seven_gallery_galleries_on_seven_portfolio_item_id", using: :btree
  
    create_table "seven_gallery_photos", force: :cascade do |t|
      t.string   "caption",                  limit: 255
      t.string   "image",                    limit: 255
      t.integer  "seven_gallery_gallery_id", limit: 4
      t.datetime "created_at",                                             null: false
      t.datetime "updated_at",                                             null: false
      t.boolean  "is_new",                   limit: 1,     default: true
      t.boolean  "is_featured",              limit: 1,     default: false
      t.text     "description",              limit: 65535
      t.string   "alt",                      limit: 255
      t.integer  "position",                 limit: 4,     default: 0
    end
  
    add_index "seven_gallery_photos", ["seven_gallery_gallery_id"], name: "index_seven_gallery_photos_on_seven_gallery_gallery_id", using: :btree
  
    create_table "seven_portfolio_item_videos", force: :cascade do |t|
      t.string   "url",                     limit: 255
      t.text     "description",             limit: 65535
      t.string   "title",                   limit: 255
      t.integer  "seven_portfolio_item_id", limit: 4
      t.datetime "created_at",                            null: false
      t.datetime "updated_at",                            null: false
    end
  
    add_index "seven_portfolio_item_videos", ["seven_portfolio_item_id"], name: "index_seven_portfolio_item_videos_on_seven_portfolio_item_id", using: :btree
  
    create_table "seven_portfolio_items", force: :cascade do |t|
      t.datetime "created_at",                                null: false
      t.datetime "updated_at",                                null: false
      t.text     "description", limit: 65535
      t.date     "finished_at"
      t.boolean  "is_featured", limit: 1,     default: false
      t.integer  "item_type",   limit: 4,     default: 0
    end
  
    add_foreign_key "seven_gallery_galleries", "seven_portfolio_items", on_delete: :cascade
    add_foreign_key "seven_gallery_photos", "seven_gallery_galleries", on_delete: :cascade
    add_foreign_key "seven_portfolio_item_videos", "seven_portfolio_items", on_delete: :cascade
  end
  </code></pre>