水豚与 FactoryGirl?

Capybara with FactoryGirl?

所以我想确保这是可能的,并且实际上是可行的。

我之前一直在使用 seeds.rb 文件为数据库播种测试数据,这对我的 Capybara 集成测试有效,但搞砸了一些其他依赖 schema.rb 的单元测试文件和工厂来创建数据。

我可以使用工厂为该特定集成规范创建测试数据吗?像这样的工厂:

FactoryGirl.define do
  factory :user do
    first_name Faker::Name.first_name
    last_name   Faker::Name.last_name
    email Faker::Internet.email
    password "password"
  end
end

然后我有一个超级简单的规范,可以登录 Capybara 中的一个站点:

  it 'Check correct login' do
    visit('/sign_in')
    page.fill_in 'user_email', :with => 'test@test.com'
    page.fill_in 'user_password', :with => 'p4ssw0rd'
    click_button('Sign In')
  end

这正在访问 Sqlite 数据库,我可以插入我的工厂并且它可以使用水豚工作吗?我真的不熟悉 factorygirl,但它实际上是在数据库中创建数据然后删除它吗?

我在网上搜索的很多例子中,很少看到 Capybara 与 FactoryGirl 一起使用,这有什么原因吗?

编辑: 这是我目前拥有的:

  it 'Check correct login' do
    user = FactoryGirl.create(:user)
    visit('/d/users/sign_in')
    page.fill_in 'user_email', :with => user.email
    page.fill_in 'user_password', :with => user.password
    click_button('Log In')
    page.assert_text('Signed in successfully.')
  end

我能够截取屏幕截图并确认表格正在随机填写 username/password,但是使用 DB Browser for SQlite 我似乎看不到数据库中的实际数据已填充(这可能很困难,因为一旦完成规范,它就会被删除吗?)但我无法判断它是否真的在创建数据。

谢谢!

这应该可以正常工作 w/o 很多问题。您需要在测试中实例化您的用户对象,因为它看起来像 'sign-in'.

您可以通过几种不同的方式创建对象。

(1)

describe 'Test' do
  let(:user){ create :user }
  ...
  it 'Specific Test' do
  ...

请注意,let!(:user){...} 会立即创建,而 let(:user){...} 只会在调用 user 时创建用户。然后,您将能够在所有测试中访问 user

(2)

describe 'Test' do
  before do
    @user = FactoryGirl.create( :user )
  end
  it 'Specific Test' do
  ...

在这里,您将能够在所有测试中访问 @user

让我们知道这是否有效,如果无效,您会遇到什么错误。

编辑:

如果您的 FG 文件如下所示:

FactoryGirl.define do
  factory :user do
    first_name Faker::Name.first_name
    last_name   Faker::Name.last_name
    email Faker::Internet.email
    password "password"
    work
  end
end

你可以这样联想工作:

let(:user){ create :user, work: 'Some Place' }
@user = FactoryGirl.create(:user, work: 'Some Place')