Spec-Zone.ru › Ruby on Rails 5.0

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

Тесты Active Model Lint

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

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

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

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

Открытые методы экземпляра

test_errors_aref() Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 101
def test_errors_aref
  assert model.respond_to?(:errors), "The model should respond to errors"
  assert model.errors[:hello].is_a?(Array), "errors#[] should return an Array"
end

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

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

test_model_naming() Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 80
def test_model_naming
  assert model.class.respond_to?(:model_name), "The model class should respond to model_name"
  model_name = model.class.model_name
  assert model_name.respond_to?(:to_str)
  assert model_name.human.respond_to?(:to_str)
  assert model_name.singular.respond_to?(:to_str)
  assert model_name.plural.respond_to?(:to_str)

  assert model.respond_to?(:model_name), "The model instance should respond to 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 69
def test_persisted?
  assert model.respond_to?(:persisted?), "The model should respond to persisted?"
  assert_boolean model.persisted?, "persisted?"
end

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

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

test_to_key() Показать исходный код
# File activemodel/lib/active_model/lint.rb, line 30
def test_to_key
  assert model.respond_to?(:to_key), "The model should respond to 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 45
def test_to_param
  assert model.respond_to?(:to_param), "The model should respond to 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 57
def test_to_partial_path
  assert model.respond_to?(:to_partial_path), "The model should respond to to_partial_path"
  assert_kind_of String, model.to_partial_path
end

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

to_partial_path используется для поиска частичных представлений. Например, модель BlogPost может вернуть «blog_posts/blog_post».

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

Spec-Zone.ru

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