我想运行一些 RSpec 测试来测试 Rails 中的 Ancestry。我想使用 FactoryGirl 为测试创建 Institution 实例。我已经尝试了下面提到的以下方法,但没有成功创建子记录。
factories.rb 文件
factory :institution do
# sequence(:name) { |n| "University of XYZ#{n}" }
end
在测试中我使用了以下样式 样式:1
let(:institution){ FactoryGirl.create(:institution, name: "ABC Institution") }
let(:institution_child) {FactoryGirl.create(:institution, name: "Sub Institution", ancestry: institution.id) }
样式:2
let(:institution){ FactoryGirl.create(:institution, name: "ABC Institution") }
let(:institution_child) {FactoryGirl.create(:institution, name: "Sub Institution", parent_id: institution.id) }
样式:3
describe Institution do
before do
@institution = Institution.create({:institution, name: "ABC Institution"})
@institution_child = Institution.create(:institution, name: "Sub Institution"}
end
it "should create the child institution" do
assigns(:institution_child).should be_a_new(Institution)
assigns(:institution_child).parent_id.should eq @institution.id
end
end
我搜索了使用 RSpec 进行 Rails Ancestry 测试的示例,但没有找到任何非常有用的东西。如果有人有任何可行的解决方案或资源可以指点我,那将非常有帮助。提前致谢。
最佳答案
选项 1,使用嵌套工厂:
factory :institution do
sequence(:name) { |n| "ABC Institution" }
factory :institution_child do |f|
# f.sequence(:name) { |n| "Here you can override name for child" }
f.parent FactoryGirl.create(:institution)
end
end
现在在 specs 中,你可以只调用 :institution_child
工厂,也可以用父级创建它:
describe Institution do
let!(:institution_child) {FactoryGirl.create(:institution_child, name: "Sub Institution") }
it "should create the child institution" do
assigns(:institution_child).should eq institution_child
assigns(:institution_child).parent.should eq institution_child.parent
# just for test
institution_child.parent.should_not be_nil
end
end
选项 2,使用特征:
factory :institution do
sequence(:name) { |n| "ABC Institution" }
trait :with_parent do
after(:build) do |o|
o.parent = FactoryGirl.create(:institution)
end
end
end
现在在规范中你可以像这样使用它:
describe Institution do
let(:institution_child) {FactoryGirl.create(:institution_child,:with_parent, name: "Sub Institution") }
#...
end
关于ruby-on-rails - 有测试血统的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557022/