Ruby on rails 如何使用factory girl和cucumber创建用户记录?

Ruby on rails 如何使用factory girl和cucumber创建用户记录?,ruby-on-rails,cucumber,factory-bot,Ruby On Rails,Cucumber,Factory Bot,我从来没有使用过工厂女孩,我从本周开始测试,所以所有这些新东西都让我发疯。谁能给我解释一下使用factory girl创建记录的简单方法吗 @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

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

@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
下面是用例。我已经使用cucumber创建了一个测试,它创建了一个用户,还创建了其他记录,如帐户、用户类别。现在我正在编写第二个测试用例,我说应该没有测试数据(我可以使用从第一个测试创建的数据,但不希望依赖于其他测试用例)。所以我想使用factory girl为我创建一个用户和相关的用户记录。这是我的测试,不使用工厂女孩

@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

因此,我如何使用factory girl实现相同的结果,这也将创建相关记录。谢谢

其他测试确实不应该依赖于此测试。对于其他场景,添加一个
给定的具有其他型号的用户存在
步骤,定义如下:

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()
call中重写它们):

在spec/factories/filters.rb中:

FactoryGirl.define do
  factory :filter do
    abc_id true
  end
end
在spec/factories/accounts.rb中(它只是一个空工厂,您可以指定经常需要分配的属性):

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

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

让我们看看不起作用的测试。你在这里所拥有的不会从FactoryGirl中受益,因为没有任何设置。我想使用FactoryGirl进行上述测试。你能解释一下为什么工厂女孩不适合做上述测试吗?我所要做的就是确保当我运行上述测试时,应该并没有测试数据,若并没有测试数据,则测试失败。因此,使用factory girl,我可以创建/插入记录到表中,并使用上述步骤。那么,缺少一个
给定的
?如果你能显示出你看到的错误,这将有助于你弄清楚你想做什么。FactoryGirl只是一个模型构建器,因此您可能缺少一些模型数据。但是我们不知道是哪一个,除非你告诉我们错误。我可以把users.rb放在features/support/factories.rb下吗。我没有规范。在创建用户I alos创建帐户时,筛选。它们之间的关系是has_one:account,:dependent=>:destroy有_one:filter,:dependent=>:destroy,所以使用您的代码将解决这个问题,否则我必须编写一个逻辑来在factory girl中创建帐户和过滤器。抱歉,如果这听起来很愚蠢,今天是我的factory Girly的第一天,您可以在
config/application.rb
中为FactoryGirl指定其他目录,如下所示:通过这些关系,您可以尝试以下操作:
factory:user do email”abc@company1.com“默认筛选级别真实ar\U id真实帐户创建(:帐户)过滤器创建(:filter)end
尝试创建过滤器时出错,并显示属性已定义:create(FactoryGirl::AttributeDefinitionError)
When I follow "All Child Users"
Then the page should have newly created child user