Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 使用FactoryGirl运行两个测试时如何限制测试数据的创建_Ruby_Ruby On Rails 3_Factory Bot - Fatal编程技术网

Ruby 使用FactoryGirl运行两个测试时如何限制测试数据的创建

Ruby 使用FactoryGirl运行两个测试时如何限制测试数据的创建,ruby,ruby-on-rails-3,factory-bot,Ruby,Ruby On Rails 3,Factory Bot,我有48条记录是由FactoryGirl创建的,这些记录使用顺序,因此它们都是唯一的 当我运行一个测试时,我会创建所有48条记录,其名称为follow Skill_1到Skill_48 当我运行后续测试时,我会创建另外48条记录,这些记录具有不同的新值,即Skill_49到Skill_96 我真的希望我的第二次测试使用与第一次测试相同的数据集,但我不知道如何做到这一点 我已经计算出,每次都会重新创建数据,但序列不会重置,因此每次运行的名称都不同 我在这里包括了我的代码 # Factory Fac

我有48条记录是由FactoryGirl创建的,这些记录使用顺序,因此它们都是唯一的

当我运行一个测试时,我会创建所有48条记录,其名称为follow Skill_1到Skill_48

当我运行后续测试时,我会创建另外48条记录,这些记录具有不同的新值,即Skill_49到Skill_96

我真的希望我的第二次测试使用与第一次测试相同的数据集,但我不知道如何做到这一点

我已经计算出,每次都会重新创建数据,但序列不会重置,因此每次运行的名称都不同

我在这里包括了我的代码

# Factory
FactoryGirl.define do
 factory :skill do

  provisioned true

  trait :skill do
   skill true
  end
  trait :language do
   language true
  end
  trait :qualification do
   qualification true
  end
  trait :role do
   role true
  end
  trait :personal_attribute do
   personal_attribute true
    end

  sequence :name do |n|n
   type = '(skill)'

   if language
    type = '(language)'
   end
   if qualification
    type = '(qualification)'
   end
   if role
    type = '(role)'
   end
   if personal_attribute
    type = '(personal_attribute)'
   end

   "skill#{n} #{type}"
  end

 end
end
单元测试在这里

describe SkillQueryService do

  let(:skills) { create_list(:skill, 10, :skill) }
  let(:languages) { create_list(:skill, 2, :language) }
  let(:qualifications) { create_list(:skill, 3, :qualification) }
  let(:roles) { create_list(:skill, 4, :role) }
  let(:personal_attributes) { create_list(:skill, 5, :personal_attribute) }

  let(:unprovisioned_skills) { create_list(:skill, 10, :skill, :provisioned  => false) }
  let(:unprovisioned_languages) { create_list(:skill, 2, :language, :provisioned  => false) }
  let(:unprovisioned_qualifications) { create_list(:skill, 3, :qualification, :provisioned  => false) }
  let(:unprovisioned_roles) { create_list(:skill, 4, :role, :provisioned  => false) }
  let(:unprovisioned_personal_attributes) { create_list(:skill, 5, :personal_attribute, :provisioned => false) }

  context 'sugguest' do

    it 'returns 20 suggested provisioned skills' do

      # Build TEST data

      service = SkillQueryService.new

      rows = service.suggest('skill')

      # rows.each do |r|
      #   display_skill(r)
      # end
      # THIS CODE PRINTS OUT SKILLS 1-48
      expect(rows.length).to eq(20)

    end


    it 'returns 20 suggested (UN)-provisioned skills' do

      # Build TEST data
      full_data_set

      service = SkillQueryService.new

      rows = service.suggest('skill')

      # rows.each do |r|
      #   display_skill(r)
      # end
      # THIS CODE PRINTS OUT SKILLS 49-96
      # HOW do I get it to have the same data as above, SKILLS 41-48

      expect(rows.length).to eq(20)
    end

  end

  def full_data_set
      skills
      languages
      qualifications
      roles
      personal_attributes

      unprovisioned_skills
      unprovisioned_languages
      unprovisioned_qualifications
      unprovisioned_roles
      unprovisioned_personal_attributes

  end

  def display_skill(skill)
    PL.kv 'name', skill.name
    PL.kv 'provisioned', skill.provisioned
    PL.kv 'skill', skill.skill
    PL.kv 'language', skill.language
    PL.kv 'qualification', skill.qualification
    PL.kv 'role', skill.role
    PL.kv 'personal_attribute', skill.personal_attribute
    PL.line
  end

  def display_skills

    PL.line
    Skill.all.each do |r|
      display_skill(r)
    end
  end

end
我在这里找到了答案

before(:each) do
    FactoryGirl.reload
end