首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Capybara的多个场景中重用Factory_Girl生成的列表

在Capybara的多个场景中重用Factory_Girl生成的列表
EN

Stack Overflow用户
提问于 2017-04-04 20:22:34
回答 1查看 61关注 0票数 1

我正在使用FactoryGirl gem来生成一组我的模型的实例,用于使用capybara进行测试。目前,测试正在检查过滤器是否工作。第一个测试通过了,但是第二个测试没有通过。

这是要运行测试的apply_filters.rb:

代码语言:javascript
复制
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

这是工厂:

代码语言:javascript
复制
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)生成一组从MyString10MyString19的实例。我希望它使用原始的MyString1MyString9。我尝试过全局变量,并将charities定义放置在任何地方。为了在即将到来的一系列测试中使用charities,我缺少了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 20:43:06

不能在多个测试中重用相同的对象,每个测试之间都会清除数据库,以便将一个测试与另一个测试隔离开来。此外,如果创建的对象的特定值对给定的测试很重要,则在创建对象时应该指定该值,并让工厂处理那些无关紧要的值。

因此,在您的示例测试中,您可能希望类似于

代码语言:javascript
复制
charities = (1..9).map {|income| FactoryGirl.create(:scotland, Most_recent_year_income: income }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43216995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档