Active Model Lint 测试
您可以通过在您的 TestCase 中包含 ActiveModel::Lint::Tests
来测试一个对象是否符合 Active Model API
。 它将包含测试,告诉您您的对象是否完全符合,或者如果不符合,哪些方面 API
没有实现。
请注意,一个对象不需要实现所有 API 才能与 Action Pack 一起使用。 此模块仅旨在在您希望开箱即用所有功能的情况下提供指导。
这些测试不试图确定返回值的语义正确性。 例如,您可以实现 valid?
以始终返回 true
,并且测试将通过。 您需要确保值在语义上是有意义的。
您传入的对象预计会从对 to_model
的调用中返回一个符合的对象。 to_model
返回 self
是完全可以的。
- T
实例公共方法
test_errors_aref() 链接
如果对象的模型响应 errors
,并且如果在该方法结果上调用 [](attribute)
返回一个数组,则通过。 否则失败。
errors[attribute]
用于检索模型中给定属性的错误。 如果存在错误,该方法应返回一个字符串数组,这些字符串是该属性的错误。 如果使用本地化,字符串应针对当前语言环境进行本地化。 如果不存在错误,该方法应返回一个空数组。
来源: 显示 | 在 GitHub 上
# 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
test_model_naming() 链接
如果对象的模型既响应 model_name
作为实例方法又作为类方法,并且如果调用该方法返回一个带有某些便利方法的字符串::human
、:singular
和 :plural
,则通过。 否则失败。
查看 ActiveModel::Naming
以获取更多信息。
来源: 显示 | 在 GitHub 上
# 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
test_persisted?() 链接
如果对象的模型响应 persisted?
并且如果调用该方法返回 true
或 false
,则通过。 否则失败。
persisted?
用于计算对象的 URL。 如果对象未持久化,例如该对象的表单将路由到创建操作。 如果它已持久化,该对象的表单将路由到更新操作。
来源: 显示 | 在 GitHub 上
# File activemodel/lib/active_model/lint.rb, line 70 def test_persisted? assert_respond_to model, :persisted? assert_boolean model.persisted?, "persisted?" end
test_to_key() 链接
如果对象的模型响应 to_key
并且如果调用该方法在对象未持久化时返回 nil
,则通过。 否则失败。
to_key
返回模型所有(主)键属性的 Enumerable
,用于为对象生成唯一的 DOM id。
来源: 显示 | 在 GitHub 上
# 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
test_to_param() 链接
如果对象的模型响应 to_param
并且如果调用该方法在对象未持久化时返回 nil
,则通过。 否则失败。
to_param
用于在 URL 中表示对象的键。 实现者可以决定在记录使用复合主键的情况下引发异常或提供默认值。 lint 中没有针对此行为的测试,因为强制实现者使用任何可能的实现策略都没有意义。
来源: 显示 | 在 GitHub 上
# 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
test_to_partial_path() 链接
如果对象的模型响应 to_partial_path
并且如果调用该方法返回一个字符串,则通过。 否则失败。
to_partial_path
用于查找部分。 例如,BlogPost 模型可能会返回“blog_posts/blog_post”。
来源: 显示 | 在 GitHub 上
# 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