Spec-Zone.ru › Ruby on Rails 7.1

модуль ActiveModel::Lint::Tests

Тесты Active Model Lint

Вы можете проверить, соответствует ли объект спецификациям Active Model API, включив 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 model.persisted?() false end
  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 model.to_key() [1] end
  def model.persisted?() false end
  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 используется для поиска частичных представлений. Например, модель BlogPost может вернуть “blog_posts/blog_post”.

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

Spec-Zone.ru

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