水豚与 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')
所以我想确保这是可能的,并且实际上是可行的。
我之前一直在使用 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')