【发布时间】:2015-11-12 03:47:35
【问题描述】:
您好,我一直在寻找一种方法来测试模型关系并偶然发现 should gem
- 应该 (3.5.0)
- 应该上下文 (1.2.1)
- 应该匹配器 (2.8.0)
不幸的是,我尝试使用 rspec 测试一个简单的示例
describe Region do
it "should have a city" do
should belong_to(:city)
end
end
我总是收到一条消息
Region should have a city
Failure/Error: should belong_to(:city)
Expected Region to have a belongs_to association called city (Region does not have a city_id foreign key.)
# ./spec/models/region_spec.rb:5:in `block (2 levels) in <top (required)>'
我虽然我的关系有问题,但我已经测试成功地创建了一个与 rails console 相关联的城市的区域。我一定是错过了什么!
编辑模型和迁移
class Region < ActiveRecord::Base
belongs_to :city
end
class City < ActiveRecord::Base
validates :name, :presence => true
has_many :regions
end
而且我在区域之后创建了城市,所以不得不稍微修改迁移文件:
class CreateCities < ActiveRecord::Migration
def change
create_table :cities do |t|
t.string :name
t.float :longitude
t.float :latitude
t.timestamps
end
add_reference :regions, :city, index: true, foreign_key: true
end
end
schema.rb
create_table "cities", force: true do |t|
t.string "name"
t.float "longitude"
t.float "latitude"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "regions", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "city_id"
end
add_index "regions", ["city_id"], name: "index_regions_on_city_id"
【问题讨论】:
-
您需要发布您的
Region和City模型以及schema.rb的相关部分,以便我们评估您的数据设置是否正确。 -
再次请发布您的地区和城市的 schema.rb,而不是您的城市迁移。最后请提供您使用的 Rails 和 Shoulda 版本。
标签: ruby-on-rails ruby rspec shoulda