在 Capybara 的多个场景中重复使用 Factory_Girl 生成的列表
Reuse Factory_Girl generated list in multiple scenarios in Capybara
我正在使用 FactoryGirl gem 生成一组我的模型实例,以便使用水豚进行测试。目前,测试正在检查过滤器是否有效。第一个测试通过,但是第二个测试没有。
这是 apply_filters.rb 测试 运行:
describe "applying filters to the scotland list" do
scenario "i apply a minimum income filter" do
charities = FactoryGirl.create_list(:scotland, 9)
visit "/scotsfilter"
fill_in('Minimum Income', :with => 5)
click_button('Apply Filters')
expect(page).to have_no_content(charities[0].Charity_Number)
expect(page).to have_content(charities[5].Charity_Number)
expect(page).to have_content(charities[6].Charity_Number)
end
scenario "i apply a maximum income filter" do
charities = FactoryGirl.create_list(:scotland, 9)
visit "/scotsfilter"
fill_in('Maximum Income', :with => 5)
click_button('Apply Filters')
expect(page).to have_content(charities[0].Charity_Number)
expect(page).to have_no_content(charities[5].Charity_Number)
expect(page).to have_no_content(charities[6].Charity_Number)
end
end
这是工厂:
FactoryGirl.define do
factory :scotland do
sequence(:id) {|n| n}
sequence(:Charity_Number){|n| "MyString#{n} "}
Charity_Name "MyString"
Registered_Date "MyString"
Known_As "MyString"
Charity_Status "MyString"
Postcode "MyString"
Constitutional_Form "MyString"
Previous_Constitutional_Form_1 "MyString"
Geographical_Spread "MyString"
Main_Operating_Location "MyString"
sequence(:Purposes){|n| "MyString#{n}"}
sequence(:Beneficiaries){|n| "MyString#{n}"}
Activities "MyString"
Objectives "MyString"
Principal_Office_Trustees_Address "MyString"
Website "MyString"
sequence(:Most_recent_year_income){|n| n}
sequence(:Most_recent_year_expenditure){|n| n}
Mailing_cycle "MyString"
Year_end "MyString"
Parent_charity_name "MyString"
Parent_charity_number "MyString"
Parent_charity_country_of_registration "MyString"
Designated_religious_body "MyString"
Regulatory_type "MyString"
end
end
然而,第二个 FactoryGirl.create_list(:scotland,9)
生成了一组从 MyString10
到 MyString19
的实例。我想让它使用原来的MyString1
到MyString9
。我尝试了全局变量并将 charities
定义放在各处。我缺少什么以便我可以在一系列即将进行的测试中使用 charities
?
您不能在多个测试中重复使用相同的对象,在每次测试之间都会清除数据库,以专门将一个测试与另一个测试隔离开来。此外,如果创建对象的特定值对给定测试很重要,您应该在创建对象时指定该值并让工厂处理无关紧要的值
因此在您的示例测试中,您可能需要类似
的东西
charities = (1..9).map {|income| FactoryGirl.create(:scotland, Most_recent_year_income: income }
我正在使用 FactoryGirl gem 生成一组我的模型实例,以便使用水豚进行测试。目前,测试正在检查过滤器是否有效。第一个测试通过,但是第二个测试没有。
这是 apply_filters.rb 测试 运行:
describe "applying filters to the scotland list" do
scenario "i apply a minimum income filter" do
charities = FactoryGirl.create_list(:scotland, 9)
visit "/scotsfilter"
fill_in('Minimum Income', :with => 5)
click_button('Apply Filters')
expect(page).to have_no_content(charities[0].Charity_Number)
expect(page).to have_content(charities[5].Charity_Number)
expect(page).to have_content(charities[6].Charity_Number)
end
scenario "i apply a maximum income filter" do
charities = FactoryGirl.create_list(:scotland, 9)
visit "/scotsfilter"
fill_in('Maximum Income', :with => 5)
click_button('Apply Filters')
expect(page).to have_content(charities[0].Charity_Number)
expect(page).to have_no_content(charities[5].Charity_Number)
expect(page).to have_no_content(charities[6].Charity_Number)
end
end
这是工厂:
FactoryGirl.define do
factory :scotland do
sequence(:id) {|n| n}
sequence(:Charity_Number){|n| "MyString#{n} "}
Charity_Name "MyString"
Registered_Date "MyString"
Known_As "MyString"
Charity_Status "MyString"
Postcode "MyString"
Constitutional_Form "MyString"
Previous_Constitutional_Form_1 "MyString"
Geographical_Spread "MyString"
Main_Operating_Location "MyString"
sequence(:Purposes){|n| "MyString#{n}"}
sequence(:Beneficiaries){|n| "MyString#{n}"}
Activities "MyString"
Objectives "MyString"
Principal_Office_Trustees_Address "MyString"
Website "MyString"
sequence(:Most_recent_year_income){|n| n}
sequence(:Most_recent_year_expenditure){|n| n}
Mailing_cycle "MyString"
Year_end "MyString"
Parent_charity_name "MyString"
Parent_charity_number "MyString"
Parent_charity_country_of_registration "MyString"
Designated_religious_body "MyString"
Regulatory_type "MyString"
end
end
然而,第二个 FactoryGirl.create_list(:scotland,9)
生成了一组从 MyString10
到 MyString19
的实例。我想让它使用原来的MyString1
到MyString9
。我尝试了全局变量并将 charities
定义放在各处。我缺少什么以便我可以在一系列即将进行的测试中使用 charities
?
您不能在多个测试中重复使用相同的对象,在每次测试之间都会清除数据库,以专门将一个测试与另一个测试隔离开来。此外,如果创建对象的特定值对给定测试很重要,您应该在创建对象时指定该值并让工厂处理无关紧要的值
因此在您的示例测试中,您可能需要类似
的东西charities = (1..9).map {|income| FactoryGirl.create(:scotland, Most_recent_year_income: income }