Rails 4 - rspec测试不通过Polymorphic Association

时间:2014-08-19 18:21:03

标签: ruby-on-rails rspec

我试图测试多态关联。

我正在使用RSpec 3.0.2和shoulda-matcher 2.6.2。我的Rails版本是:4.1.4和Ruby 2.1.2

我的第一个模型:app / models / address.rb

class Address < ActiveRecord::Base
    belongs_to :addressable, polymorphic: true
end

我的第二个模型:app / models / user.rb

class User < ActiveRecord::Base
    has_many :addresses, as: :addressable
end

我的第三个模型:app / models / company.rb

class Company < ActiveRecord::Base
     has_many :addresses, as: :addressable
end

对于地址表,我有这个迁移:

class CreateAddresses < ActiveRecord::Migration
    def change
        create_table :addresses do |t|
            t.string :description
            t.references :addressable, polymorphic: true
            t.timestamps
        end
    end
end

对于我的第一个规范,我有:spec / models / address_spec.rb

require 'rails_helper'

RSpec.describe Address, :type => :model do
    it { should belong_to :addressable }
end

但是当我尝试运行规范时,我遇到了这个错误:

  

故障:

     

1)地址应属于可寻址的        失败/错误:它{should belongs_to:addressable}          有一个名为addressable的belongs_to关联的预期地址(Address没有addressable_id外键。)        './spec/models/address_spec.rb:4:in'块(2级)'

enter image description here

通过迁移生成表格:

enter image description here

请你帮我确定一下我失踪的地方。我只是从谷歌看到stackoverflow,但没有解决方案。

1 个答案:

答案 0 :(得分:2)

addressable_id列不在您的测试数据库中。运行:

bundle exec rake db:test:clone

将数据库更改同步到测试数据库。