Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有测试血统的工厂_Ruby On Rails_Rspec_Factory Bot_Ancestry - Fatal编程技术网

Ruby on rails 有测试血统的工厂

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

我想运行一些RSpec测试来测试Rails中的祖先。我想使用FactoryGirl为测试创建机构实例。我尝试了以下提到的方法,但没有成功地创建子记录

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祖先测试的例子,但没有发现任何有用的东西。如果任何人有任何工作的解决方案或来源,他们可以告诉我,这将是非常有益的。提前谢谢

选项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