我有以下型号:
class Company < ActiveRecord::Base
has_and_belongs_to_many :regions
class Region < ActiveRecord::Base
has_many :requests
has_and_belongs_to_many :companies
class RequestForProposals < ActiveRecord::Base
belongs_to :region
每当我收到新请求时,我都会向同一地区的公司发送通知。
如何在我的灯具中进行设置,以便我可以单独测试寻找合适公司的逻辑?
我试过
region_ids: 1, 2
regions: one, two
在companies.yml中,但不适用于为公司分配区域。
以下是SQL生成的要点:https://gist.github.com/2713518
答案 0 :(得分:34)
有关
regions: one, two
在companies.yml
工作,您需要让rails自动为区域分配ID。这是因为(为了避免在companies.yml之前必须读取regions.yml),rails会根据公司灯具的名称计算它在连接表中的ID。如果您自己分配了ID,则它们将与计算出的ID不匹配。
从您提供的sql看起来,您将区域上的ID设置为1和2,即您的regions.yml已
one:
id: 1
name: MyString
删除id:1
,你应该没问题。您还需要更新引用区域的任何其他文件(例如request_for_proposals.yml),替换
region_id: 1
与
region: one
Rails会知道这意味着将region_id
设置为您的灯具中带有标签one
的区域的ID。
答案 1 :(得分:0)
我不确定这些天如何使用YAML灯具。您是否尝试FactoryGirl在测试时创建数据库对象实例?它的确与固定装置几乎完全相同,但却非常复杂。
以下段落假设您使用rspec
作为测试框架。
在factory_girl-rails
中加入Gemfile
并相应地更新spec/spec_helper.rb
自述文件后,请创建以下文件:
factory_girl
现在真正的问题是 - 你正在做的实际测试代码是什么?
答案 2 :(得分:0)
您的regions.yml是test / fixtures目录吗? companies.yml怎么样?对于给定公司,您的代码“区域:一,二”应该有效 运行测试时,Rails会自动加载此目录中的灯具。 如果位置正确,请在运行测试时发布测试输出 - 生成的sql。
答案 3 :(得分:0)
如果您需要自己计算此ID,请接受已接受的答案,例如:你有一些松散的引用或其他数据源只是添加:
def fixh(key)
ActiveRecord::FixtureSet.identify key
end
到你的test_helper.rb
,然后在灯具中使用这种方式:
security_context1:
ext_id: <%= fixh :user1 %>