我在rubyonrailstutor.com上关注了Restauranlty教程,一切都很完美。现在我正在尝试在我的项目中实现相同的测试,其中有更多的模型与它们之间存在关联,并且我遇到了错误。
我尝试过研究这个问题,甚至在这个网站上遇到过几个问题 - 最值得注意的是this one和this one。
我有以下型号:
class Album < ActiveRecord::Base
belongs_to :artist
validates_presence_of :title
validates_presence_of :no_of_tracks
end
class Artist < ActiveRecord::Base
has_many :albums
end
我有以下工厂:
FactoryGirl.define do
factory :artist do
name "MyString"
image "MyString"
bio "MyString"
end
end
FactoryGirl.define do
factory :album do
title "MyString"
no_of_tracks 0
artist
end
end
除了遵循Restaurantly教程之外,这是我第一次测试,所以我也查看this guide为有关联的模型设置工厂女孩。
我的测试是:
describe Album do
subject(:album) { FactoryGirl.build :album, title: nil, artist: nil,
no_of_tracks: nil }
it { expect(album.valid?).to be_false }
end
但是当我运行它时失败并出现错误:can't write unknown attribute artist_id
。
我上面提到的问题表明,我的数据库可能没有正确迁移,但我已经同时运行了
bundle exec rake db:migrate RAILS_ENV=test
和
bundle exec rake db:test:prepare
无济于事。正如我所说,我对测试非常非常新,所以如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分:1)
一切都很好看。
你的artist_id
表格中确实有一列albums
吗?
答案 1 :(得分:0)
我怀疑数据库中的albums
表没有artist_id
外包密钥。