модуль 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.
Публичные методы экземпляров
# File activemodel/lib/active_model/lint.rb, line 102 def test_errors_aref assert_respond_to model, :errors assert model.errors[:hello].is_a?(Array), "errors#[] should return an Array" end
Проходит, если модель объекта отвечает на errors и если вызов [](attribute) результата этого метода возвращает массив. В противном случае завершается неудачей.
errors[attribute] используется для получения ошибок модели для заданного атрибута. Если ошибки присутствуют, метод должен вернуть массив строк, являющихся ошибками для рассматриваемого атрибута. Если используется локализация, строки должны быть локализованы для текущей локали. Если ошибки нет, метод должен вернуть пустой массив.
# 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 для получения дополнительной информации.
# 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 для объекта. Если объект не сохранён, форма для этого объекта, например, будет маршрутизироваться к действию создания. Если объект сохранён, форма для объекта будет маршрутизироваться к действию обновления.
# 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 для объекта.
# 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 нет тестов для этого поведения, поскольку нет смысла навязывать реализаторам какие-либо конкретные стратегии реализации.
# 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–2018 David Heinemeier Hansson
Licensed under the MIT License.