如何使用工厂女孩和黄瓜创建用户记录?

我从来没有使用工厂女孩,我从本周开始测试,所以所有这些新东西只是让我发疯。 谁能解释一下使用工厂女孩创建记录的简单方法。

这是用例。 我已经使用黄瓜创建了一个测试,它创建了一个用户并创建了其他记录,如帐户,用户类别。 现在我正在编写第二个测试用例,我说应该没有测试数据(我可以使用从第一次测试创建的数据,但不希望从其他测试用例中获得依赖。)。 所以我想使用工厂女孩为我创建一个用户和相关的用户记录。 在这里,我的测试无需使用工厂女孩。

@no-database-cleaner Feature: Managing users parent child relationships In order to use portal I want to create parent child relationships Scenario: Creating a child user Given I am on the homepage When I attempt to sign in with following user account: | email address | password | | abc@company1.com | password | Then I should see "abc@company1.com" message on page When I follow "All Child Users" Then I should see "Add Sub Child" When I click "Add Sub Child" Then I should see "Child Sub User" And I fill in "Email" with "xyztest@gmail.com" And I select "Medium" from "user_filter" And I choose "abc_id_yes" When I press "Create Child User" Then I should see "Child User is successfully created." And appropriate records should get created for the child user for new abc_id 

在步骤定义中,我有类似的代码

 Then(/^appropriate records should get created for the child user for new abc_id$/) do parent_user = User.find_by_email("abc@company1.com") user = User.find_by_email("xyztest@gmail.com") account = Account.find_by_user_id(parent_user) user.default_filter_level.should be_true user.ar_id.should be_true user.parent_id.should == parent_user.id filter = Filter.find_by_user_id(user.id) filter.user_id.should == user.id filter.abc_id.should be_true filter.account_id.should == account.id end 

所以我如何使用工厂女孩获得相同的结果,这也将创建相关的记录。 谢谢

你确实其他测试不应该依赖于这个测试。 对于其他方案,使用以下定义添加给Given an user with other models exists步骤:

 Given(/^an user with other models exists$/) do parent = FactoryGirl.create(:user) user = FactoryGirl.create(:user, email: "xyztest@gmail.com" parent_id: parent) account = FactoryGirl.create(:account, user_id: user.id) FactoryGirl.create(:filter, user_id: user.id, account_id: account.id) end 

在spec / factories / users.rb中(您指定了默认属性值,但您可以在FactoryGirl.create()调用中覆盖它们):

 FactoryGirl.define do factory :user do email "abc@company1.com" default_filter_level true ar_id true end end 

在spec / factories / filters.rb中:

 FactoryGirl.define do factory :filter do abc_id true end end 

在spec / factories / accounts.rb中(它只是一个空工厂,您可以指定经常需要分配的属性。):

 FactoryGirl.define do factory :account do end end 

请注意,在方案的最后一步中,您不应测试是否创建了适当的模型:

 And appropriate records should get created for the child user for new abc_id 

而是使用这样的东西:

 When I follow "All Child Users" Then the page should have newly created child user