Поэтому я хочу убедиться, что это возможно и действительно выполнимо с тем, что я пытаюсь сделать.Capybara with FactoryGirl?
я ранее использовал seeds.rb
файл для заполнения базы данных с тестовыми данными, это работает для моих тестов интеграции Капибары, но испортил некоторые из других модульных тестов, которые полагаются на 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
Тогда у меня есть супер простой спецификация, которая Логины на сайт в Капибаре:
it 'Check correct login' do
visit('/sign_in')
page.fill_in 'user_email', :with => '[email protected]'
page.fill_in 'user_password', :with => 'p4ssw0rd'
click_button('Sign In')
end
Это ударять SQLite базы данных, я могу вставить свой завод и его будет работать с использованием capybara? Я действительно не знаком с 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
Я был в состоянии сделать снимок и убедитесь, что формы становятся заполнены со случайным именем пользователя/пароль, но с использованием DB Browser для SQLite Кажется, я не вижу фактических данных в заполняемой базе данных (что может быть затруднено, так как после того, как спецификация завершена, она удалена правильно?), Но я не могу сказать, действительно ли она создает данные или нет.
Спасибо!
Что я использую для FILL_IN-х годов? 'Faker :: Internet.email' и' password'? Также есть «лучшая практика» в «let!» vs «let» – msmith1114
Я не использовал Faker, на самом деле, но это выглядит правильно. Вы также можете просто вставить строку '' fake-email @ email.org'' и '' password'' в файл FactoryGirl. Вы также можете помещать ассоциации в файл FG, просто оставляя их пустыми и ссылаясь на них при создании экземпляра: 'let! (: User) {create: user, work: 'Some Place'}' Что касается 'let!' Или ' пусть 'это в основном ленивая проблема с загрузкой - не нужно загружать вещи, которые вы не используете, но если вы не знаете, что делаете, ваш тест может не сработать, потому что ваш объект, на ваш взгляд, отсутствует! :-) Я добавлю код в ответ. –
@ msmith1114 Для fill_in вы должны использовать либо 'page.fill_in 'user_email', с помощью: user.email' или' page.fill_in 'user_email', с помощью: @ user.email' в зависимости от того, используете ли вы 'let' или создавать собственные переменные экземпляра в блоке перед блоком. –