модуль 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.
Методы публичного экземпляра
Тестирование ошибок
Возвращает объект, который реализует [](attribute), определяющий, который возвращает массив строк, являющихся ошибками для данного атрибута. Если используется локализация, строки должны быть локализованы для текущей локали. Если ошибка отсутствует, этот метод должен вернуть пустой массив.
# File activemodel/lib/active_model/lint.rb, line 94 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
Именование
Model.model_name должен возвращать строку с некоторыми удобными методами: :human, :singular и :plural. Дополнительную информацию см. в ActiveModel::Naming.
# File activemodel/lib/active_model/lint.rb, line 79 def test_model_naming assert model.class.respond_to?(:model_name), "The model 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) end
Реагирует на persisted?
Возвращает булево значение, указывающее, был ли объект сохранен. Это используется при расчете URL для объекта. Если объект не сохранен, форма для этого объекта, например, будет перенаправлена на действие создания. Если объект сохранен, форма для объекта будет перенаправлена на действие обновления.
# 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
Реагирует на to_key
Возвращает перечисляемый объект всех (первичных) атрибутов ключа или nil, если model.persisted? ложно. Это используется dom_id для генерации уникальных идентификаторов для объекта.
# File activemodel/lib/active_model/lint.rb, line 29 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_param
Возвращает строку, представляющую ключ объекта, подходящую для использования в URL или nil в случае, если model.persisted? является false.
Реализаторы могут решить либо вызвать исключение, либо предоставить значение по умолчанию в случае, если запись использует составной первичный ключ. В lint нет тестов для этого поведения, так как нет смысла принуждать реализатора к какой-либо стратегии реализации. Однако, если ресурс не сохранён, то to_param всегда должен возвращать nil.
# File activemodel/lib/active_model/lint.rb, line 46 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_partial_path
Возвращает строку, задающую относительный путь. Это используется для поиска частичных представлений. Например, модель BlogPost может возвращать “blog_posts/blog_post”.
# 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
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.