Spec-Zone.ru › Ruby on Rails 8.1

module ActiveModel::Lint::Tests

Тесты проверки Active Model

Проверить, соответствует ли объект API Active Model, можно, включив ActiveModel::Lint::Tests в свой TestCase. Будут запущены тесты, которые покажут, полностью ли ваш объект соответствует требованиям, а если нет — какие аспекты API не реализованы.

Обратите внимание: для работы с Action Pack объекту необязательно реализовывать все API. Этот модуль призван лишь дать рекомендации на случай, если вы хотите получить все возможности из коробки.

Эти тесты не пытаются определить семантическую корректность возвращаемых значений. Например, можно реализовать valid? так, чтобы он всегда возвращал true, и тесты пройдут. Вы сами должны убедиться, что значения имеют смысл с точки зрения семантики.

Ожидается, что переданные вами объекты при вызове to_model будут возвращать соответствующий требованиям объект. Вполне допустимо, чтобы to_model возвращал self.

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

test_errors_aref () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 102
def test_errors_aref
  assert_respond_to model, :errors
  assert_equal [], model.errors[:hello], "errors#[] should return an empty Array"
end

Тест проходит, если модель объекта отвечает на errors и вызов [](attribute) для результата этого метода возвращает массив. В противном случае тест завершается неудачей.

errors[attribute] используется для получения ошибок модели для заданного атрибута. Если ошибки есть, метод должен возвращать массив строк с ошибками для соответствующего атрибута. Если используется локализация, строки должны быть локализованы для текущей локали. Если ошибок нет, метод должен возвращать пустой массив.

test_model_naming () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 81
def test_model_naming
  assert_respond_to model.class, :model_name
  model_name = model.class.model_name
  assert_respond_to model_name, :to_str
  assert_respond_to model_name.human, :to_str
  assert_respond_to model_name.singular, :to_str
  assert_respond_to model_name.plural, :to_str

  assert_respond_to model, :model_name
  assert_equal model.model_name, model.class.model_name
end

Тест проходит, если модель объекта отвечает на model_name как метод экземпляра и как метод класса, а вызов этого метода возвращает строку с несколькими вспомогательными методами: :human, :singular и :plural.

Дополнительную информацию см. в разделе ActiveModel::Naming.

test_persisted? () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 70
def test_persisted?
  assert_respond_to model, :persisted?
  assert_boolean model.persisted?, "persisted?"
end

Тест проходит, если модель объекта отвечает на persisted? и вызов этого метода возвращает true или false. В противном случае тест завершается неудачей.

persisted? используется при вычислении URL объекта. Если объект не сохранён, например, форма для этого объекта будет направлена на действие создания. Если объект сохранён, форма для него будет направлена на действие обновления.

test_to_key () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 31
def test_to_key
  assert_respond_to model, :to_key
  def_method(model, :persisted?) { false }
  assert model.to_key.nil?, "to_key should return nil when `persisted?` returns false"
end

Тест проходит, если модель объекта отвечает на to_key и вызов этого метода возвращает nil, когда объект не сохранён. В противном случае тест завершается неудачей.

to_key возвращает Enumerable всех атрибутов (первичного) ключа модели и используется для создания уникального идентификатора DOM для объекта.

test_to_param () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 46
def test_to_param
  assert_respond_to model, :to_param
  def_method(model, :to_key) { [1] }
  def_method(model, :persisted?) { false }
  assert model.to_param.nil?, "to_param should return nil when `persisted?` returns false"
end

Тест проходит, если модель объекта отвечает на to_param и вызов этого метода возвращает nil, когда объект не сохранён. В противном случае тест завершается неудачей.

to_param используется для представления ключа объекта в URL. Реализующий этот метод может решить, выбрасывать ли исключение или возвращать значение по умолчанию, если запись использует составной первичный ключ. В проверках этого модуля lint нет тестов для такого поведения, поскольку было бы неправильно навязывать реализующему одну из возможных стратегий.

test_to_partial_path () Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 58
def test_to_partial_path
  assert_respond_to model, :to_partial_path
  assert_kind_of String, model.to_partial_path
end

Тест проходит, если модель объекта отвечает на to_partial_path и вызов этого метода возвращает строку. В противном случае тест завершается неудачей.

to_partial_path используется для поиска шаблонов partial. Например, модель BlogPost может возвращать «blog_posts/blog_post».

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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