Spec-Zone.ru › Ruby on Rails 7.0

класс ActiveStorage::FixtureSet

Родитель:
Объект
Включенные модули:
ActiveSupport::Testing::FileFixtures, ActiveRecord::SecureToken

Фикстуры — это способ организации данных, с которыми вы хотите провести тестирование; короче говоря, образцовые данные.

Чтобы узнать больше о фикстурах, прочтите 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 63
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/action_text/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 67
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