use*_*324 2 ruby-on-rails cucumber factory-bot
我从来没有使用工厂女孩,我从本周开始测试所以所有这些新东西让我疯了.谁能解释一下使用工厂女孩创建记录的简单方法.
这是用例.我已经使用黄瓜创建了一个测试,它创建了一个用户,并创建了其他记录,如帐户,用户类别.现在我正在编写第二个测试用例,我说应该没有测试数据(我可以使用从第一次测试创建的数据,但不希望从其他测试用例中依赖.).所以我想使用工厂女孩为我和相关的用户记录创建一个用户.在这里,我的测试无需使用工厂女孩.
@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
Run Code Online (Sandbox Code Playgroud)
在步骤定义中,我有类似的代码
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
Run Code Online (Sandbox Code Playgroud)
所以我如何使用工厂女孩获得相同的结果,这也将创建相关的记录.谢谢
你确实其他测试不应该依赖于这个测试.对于其他方案,请添加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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
在spec/factories/filters.rb中:
FactoryGirl.define do
factory :filter do
abc_id true
end
end
Run Code Online (Sandbox Code Playgroud)
在spec/factories/accounts.rb中(它只是一个空工厂,您可以指定您经常需要分配的属性.):
FactoryGirl.define do
factory :account do
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,在方案的最后一步中,您不应测试是否创建了适当的模型:
And appropriate records should get created for the child user for new abc_id
Run Code Online (Sandbox Code Playgroud)
而是使用这样的东西:
When I follow "All Child Users"
Then the page should have newly created child user
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5541 次 |
| 最近记录: |