класс ActiveStorage::FixtureSet
Active Storage FixtureSet
Фикстуры — это способ организации данных, которые вы хотите использовать при тестировании; короче говоря, образцы данных.
Чтобы узнать больше о фикстурах, прочитайте документацию по ActiveRecord::FixtureSet.
YAML
Как и другие модели, основанные на Active Record, записи ActiveStorage::Attachment и ActiveStorage::Blob наследуются от экземпляров ActiveRecord::Base и поэтому могут быть заполнены фикстурами.
Представьте себе гипотетический класс модели Article, его связанные данные фикстур, а также данные фикстур для связанных записей ActiveStorage::Attachment и ActiveStorage::Blob:
# app/models/article.rb class Article < ApplicationRecord has_one_attached :thumbnail end # fixtures/active_storage/blobs.yml first_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob filename: "first.png" %> # fixtures/active_storage/attachments.yml first_thumbnail_attachment: name: thumbnail record: first (Article) blob: first_thumbnail_blob
При обработке Active Record вставит записи в базу данных для каждой записи фикстуры и обеспечит целостность связи Active Storage.
Публичные методы класса
# File activestorage/lib/active_storage/fixture_set.rb, line 62 def self.blob(filename:, **attributes) new.prepare Blob.new(filename: filename, key: generate_unique_secure_token), **attributes end
Создайте YAML-представление атрибутов экземпляра ActiveStorage::Blob, определите файл относительно каталога, указанного в ActiveSupport::Testing::FileFixtures.file_fixture, и загрузите файл в Service.
Примеры
# tests/fixtures/active_storage/blobs.yml second_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob( filename: "second.svg", ) %> third_thumbnail_blob: <%= ActiveStorage::FixtureSet.blob( filename: "third.svg", content_type: "image/svg+xml", service_name: "public" ) %>
Публичные методы экземпляра
# File activestorage/lib/active_storage/fixture_set.rb, line 66
def prepare(instance, **attributes)
io = file_fixture(instance.filename.to_s).open
instance.unfurl(io)
instance.assign_attributes(attributes)
instance.upload_without_unfurling(io)
instance.attributes.transform_values { |value| value.is_a?(Hash) ? value.to_json : value }.compact.to_json
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.