新手求教:如何在Cucumber步骤定义中访问FactoryBot创建的记录
在Cucumber步骤定义中访问FactoryBot创建的记录
嘿,作为FactoryBot和Cucumber的新手,我完全懂你想在步骤定义里拿到创建好的用户信息的需求!这里有几种实用的方法帮你搞定:
方法一:在步骤定义内直接创建并访问实例
最直接的方式就是在步骤里创建signuser实例,把它存到实例变量里,之后就能直接调用它的属性啦:
When (/^enter exists details for Register$/)do # 创建signuser实例并存储到实例变量 @user = FactoryBot.create(:signuser) # 用Capybara的fill_in方法填入表单(假设你的输入框label或id是Email/Password) fill_in 'Email', with: @user.email fill_in 'Password', with: @user.password end
这样一来,创建的用户信息就直接关联到当前步骤的上下文里,能直接拿到你在factory里定义的email和password。
方法二:通过钩子提前创建,多步骤共享实例
如果你的多个步骤都需要用到同一个用户实例,推荐用Cucumber的Before钩子提前创建,这样在所有关联步骤里都能访问:
- 先在
features/support/hooks.rb文件里添加钩子(如果没有这个文件就新建一个):
Before('@create_signuser') do # 提前创建用户并存储到实例变量 @user = FactoryBot.create(:signuser) end
- 然后在你的.feature测试文件里,给需要用到这个用户的场景加上标签
@create_signuser:
@create_signuser Scenario: 测试注册页面填写已存在用户信息 When enter exists details for Register # 其他步骤...
- 最后在步骤定义里直接使用实例变量:
When (/^enter exists details for Register$/)do fill_in 'Email', with: @user.email fill_in 'Password', with: @user.password end
注意:控制台创建的实例无法直接在Cucumber步骤里访问
你提到在控制台执行FactoryBot.create(:signuser),但控制台进程和Cucumber运行的测试进程是完全分开的,所以步骤定义里拿不到控制台创建的记录哦,一定要在Cucumber的测试上下文(步骤或钩子)里创建实例才行。
内容的提问来源于stack exchange,提问作者user8561993
相关产品推荐
相关产品推荐

