Factory_girl / Capybara和Cucumber

时间:2015-02-12 14:36:41

标签: ruby cucumber capybara factory-bot

在我的Rails项目中,我通常使用factory_girl在我的应用中构建/创建用户。我想知道在使用Cucumber,Capybara测试用户与我的应用程序交互时是否可以使用factory_girl。没有数据库可以保存它们,我只想存储它们的凭据

我可以有很多用户,所以想为每个用户创建工厂(除非有更好的方法可以使用Cucumber)。

在我的支持文件夹中,我可以创建一个工厂文件夹,然后创建一个包含每个用户的.rb文件。

FactoryGirl.define do
  factory :user_1 do
    username "username"
    password "password"
  end
end

在我的env.rb文件中,我要求Factory Girl,但这还不够

require 'factory_girl'

好像在我的功能中我尝试

Then(/^I will enter my credentials$/) do
  fill_in 'username', :with => user_1.email
  fill_in 'password', :with => user_2.password
  click_button 'login-button'
end

我得到了

uninitialized constant user_1

我也有一种感觉,如果要工作,我需要一个可以构建工厂用户的前钩子,但我现在不确定整个设置。

有没有人以这种方式使用factory_girl,或者正如我之前提到的那样,有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你应该能够像这样沸腾

Given(/^I will enter my credentials$/) do
  @user = user = FactoryGirl.create(:user)
end

您可以阅读有关此问题的更多信息https://stackoverflow.com/a/16841999/4421094这真的很有帮助

答案 1 :(得分:0)

感谢@MarshallCap的答案,我想出了一个可行的解决方案,想要分享,也许是正确的,或者有更好的方法,但这就是我最终做的,如果这有助于其他人那么大。

首先,我为factory_users

创建了一个课程
class Users
  FactoryGirl.define do
    factory :user_1, :class => :users do |u|
      u.skip_create
      u.username "username1"
      u.password "password"
    end
  end

 FactoryGirl.define do
   factory :user_2, :class => :users do |u|
     u.skip_create
     u.username "username2"
     u.password "password2"
   end
 end
end

factory_girl

中需要env.rb
require 'factory_girl'

在我的登录脚本中,在step_definitions中为实例变量分配了一个用户属性的哈希

Then(/^I will enter my credentials$/) do
 @user = FactoryGirl.attributes_for(:user_1)
 fill_in 'username', :with => @user[:username]
end