Spec-Zone.ru › Ruby on Rails 7.2

class ActiveStorage::FixtureSet

Parent:
Объект
Included modules:
ActiveSupport::Testing::FileFixtures, ActiveRecord::SecureToken

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.

Публичные методы класса

blob(filename:, **attributes) Показать исходный код
# 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"
) %>

Публичные методы экземпляра

prepare(instance, **attributes) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API