Ruby on rails 有测试血统的工厂
我想运行一些RSpec测试来测试Rails中的祖先。我想使用FactoryGirl为测试创建机构实例。我尝试了以下提到的方法,但没有成功地创建子记录 factories.rb文件Ruby on rails 有测试血统的工厂,ruby-on-rails,rspec,factory-bot,ancestry,Ruby On Rails,Rspec,Factory Bot,Ancestry,我想运行一些RSpec测试来测试Rails中的祖先。我想使用FactoryGirl为测试创建机构实例。我尝试了以下提到的方法,但没有成功地创建子记录 factories.rb文件 factory :institution do # sequence(:name) { |n| "University of XYZ#{n}" } end 在测试中,我使用了以下样式 风格:1 let(:institution){ FactoryGirl.create(:institution, na
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祖先测试的例子,但没有发现任何有用的东西。如果任何人有任何工作的解决方案或来源,他们可以告诉我,这将是非常有益的。提前谢谢 选项1,使用嵌套工厂:
现在在specs中,您也可以调用:institution\u child
工厂,并使用parent创建它:
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,使用特征:
现在在规格中,您可以这样使用它:
describe Institution do
let(:institution_child) {FactoryGirl.create(:institution_child,:with_parent, name: "Sub Institution") }
#...
end
这些规范是否会在spec/model/UNITATION_spec.rb文件中?工厂的变色应在外部文件中。
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