相关疑难解决方法(0)

ActiveModel ::匿名类的验证

我正在开发一个类似DataMapper的小型ODM项目,我正在尝试使用该ActiveModel::Validations组件.但是,我在编写测试时遇到了问题 - 我使用匿名类来构造我的测试模式,但是当运行验证器时,ActiveModel::Name类会抛出错误: Class name cannot be blank. You need to supply a name argument when anonymous class given

这是一个重现的简单代码示例:

require 'active_model'

book_class = Class.new do
  include ActiveModel::Validations

  validates_presence_of :title

  def title; ""; end # This will fail validation
end

book_class.new.valid? # => throws error
Run Code Online (Sandbox Code Playgroud)

只有在验证程序失败时才会引发异常 - 我猜测在尝试构造验证错误消息时会发生问题.所以我的问题是:

  • 我做了很多搜索,但找不到任何人试图做类似的事情.这是不可能使用ActiveModel,还是有一个我不知道的解决方法?

ruby activemodel

13
推荐指数
2
解决办法
2421
查看次数

使用 Minitest 测试自定义验证器

我有多个带有电子邮件验证的模型。因此,我已将验证提取到自定义验证器中。我按照Rails Guides的教程进行了修改。

class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
      record.errors[attribute] << (options[:message] || "is not an email")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。但是由于我已经将电子邮件验证的功能提取到了它自己的范围内,所以我也想单独测试它。我不想为每个模型添加相同的电子邮件格式测试。

我发现了另一个问题,它也问了同样的问题,但对于 RSpec。但是由于我还没有使用过存根和模拟,我不知道如何将测试移植到 Minitest 测试中。我还没有找到任何使用 Minitest 测试自定义验证器的资源。

有谁知道如何在 Minitest 中为自定义验证器编写此类测试(不使用规范!)?

validation unit-testing ruby-on-rails custom-validators minitest

5
推荐指数
1
解决办法
1734
查看次数