class 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 66 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 70
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.