Как использовать faker для заполнения таблиц в Rails?
Библиотека faker в Ruby on Rails позволяет генерировать тестовые данные, которые можно использовать для заполнения таблиц в базе данных. Это особенно полезно для тестирования и разработки, когда вам нужны реалистичные данные, но вы мы не хотим вводить их вручную.
Установка Faker
Если еще не установлен faker, нужно его добавить в Gemfile:
# Gemfile
group :development, :test do
gem 'faker'
end
Затем выполнить команду:
bundle install
Использование Faker для заполнения таблиц
Предположим, у нас есть модель User
. Сначала создадим миграцию для таблицы users
, если она еще не создана:
rails generate model User name:string email:string
rails db:migrate
Откройте файл db/seeds.rb
, который используется для заполнения базы данных начальными данными. Вы можете использовать Faker
для генерации поддельных данных. Например:
# db/seeds.rb
require 'faker'
10.times do
User.create(
name: Faker::Name.name,
email: Faker::Internet.email
)
end
В этом примере мы создадим 10 пользователей с случайными именами и адресами электронной почты.
После того, как настроили сиды, применим их, чтобы заполнить базу данных:
rails db:seed
Это выполнит код в db/seeds.rb и создаст 10 пользователей с данными.
- Проверка данных:
Проверим, что данные были успешно добавлены, запустив консоль Rails:
bin/rails console
Затем выполним:
User.all
Это должно вернуть список пользователей с поддельными данными.
Использование Faker в тестах
Можете использовать Faker
в тестах. Пример теста для контроллера задач:
class TasksControllerTest < ActionDispatch::IntegrationTest
setup do
@task = tasks(:one)
@attrs = {
name: Faker::Artist.name,
description: Faker::Movies::HarryPotter.quote,
status: Faker::Movies::HarryPotter.spell,
creator: Faker::Movies::HarryPotter.character,
performer: Faker::Movies::HarryPotter.character,
completed: Faker::Boolean.boolean
}
end
test 'should get index' do
get tasks_url
assert_response :success
end
test 'should get new' do
get new_task_url
assert_response :success
end
test 'should create task' do
post tasks_url, params: { task: @attrs }
task = Task.find_by! name: @attrs[:name]
assert_redirected_to task_url(task)
end
test 'should show task' do
get task_url(@task)
assert_response :success
end
test 'should get edit' do
get edit_task_url(@task)
assert_response :success
end
test 'should update task' do
patch task_url(@task), params: { task: @attrs }
assert_redirected_to task_url(@task)
@task.reload
assert { @task.name == @attrs[:name] }
end
test 'should destroy task' do
delete task_url(@task)
assert_redirected_to tasks_url
assert { !Task.exists? @task.id }
end
end
И еще можем использовать Faker в фикстурах:
DEFAULTS: &DEFAULTS
name: Аналитик данных
description: <%= Faker::Lorem.paragraph %>
slug: developers
locale: <%= I18n.locale %>