我在我的装置中使用 FactoryGirl,但我发现它并没有真正产生有用的验证错误。
我总是收到 activerecord.errors.models.messages.record_invalid 的消息。
不确定需要哪些进一步的细节来帮助诊断。这使得跟踪每个错误成为一个极其缓慢的过程。
示例工厂:
Factory.define :partner do |partner|
partner.sequence(:username){ |n| "amcconnon#{n}" }
partner.first_name "Bobby Joe"
partner.last_name "Smiley"
partner.sequence(:email){ |n| "bob{n}@partners.com" }
partner.phone_number "5557 5554"
partner.country_id 75
partner.password "password"
partner.password_confirmation "password"
end
然后 Factory(:partner) => "ActiveRecord::RecordInvalid Exception: 看起来这些更改出了问题"
实际的问题当然是电子邮件序列没有正确使用 n 并且对电子邮件有一个独特的验证。但这是为了说明目的。
rails => 3.2.2
factory_girl 2.6.1
需要其他任何 deets 来帮助诊断吗?
(注意:编辑这个只是为了添加一个更容易阅读的工厂)
编辑:
根据 bijan 的评论:“我到底想做什么。”
试图运行“rspec 规范”。我想在这种情况下,当我使用像 Factory(:partner) 这样的工厂来获取错误消息时,当它无法包含我从 Partner.new({blah...}).valid 得到的相同错误时?然后查看验证失败。
最佳答案
我不确定这是否与您遇到的问题完全相同,但这是我遇到的一个问题,验证错误消息不是很有用,我认为它可能对搜索此问题的其他人有用。下面是我想出来的。这也可以修改以提供不同的信息。
include FactoryGirl::Syntax::Methods
# Right after you include Factory Girl's syntax methods, do this:
def create_with_info(*args, &block)
create_without_info(*args, &block)
rescue => e
raise unless e.is_a? ActiveRecord::RecordInvalid
raise $!, "#{e.message} (Class #{e.record.class.name})", $!.backtrace
end
alias_method_chain :create, :info
然后,当您使用
create :model_name
时,它将始终在错误消息中包含模型名称。我们有一些相当深的依赖关系(是的,另一个问题),并且有一个验证错误,比如“名称无效”……而 name
是几个不同模型的一个属性。添加此方法后,可以节省大量调试时间。关于ruby-on-rails - FactoryGirl 没有给出有用的验证错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9825515/