【问题标题】:Rails nested models failing validationRails 嵌套模型未通过验证
【发布时间】:2013-04-16 18:01:10
【问题描述】:

我正在使用 rspec 为 3 层深的嵌套模型编写模型规范测试。每个-> 代表一个has_many 关系。

Users->Goals->Milestones

现在,我的 spec/models/milestone_spec.rb 测试未通过 be_valid 检查,我有点不知道为什么会这样。

Failures:

  1) Milestone 
     Failure/Error: it { should be_valid }
       expected valid? to return true, got false
     # ./spec/models/milestone_spec.rb:17:in `block (2 levels) in <top (required)>'

规范本身:

describe Milestone do
  let(:user) { FactoryGirl.create(:user) }
  let(:goal) { user.goals.build(content: "Loreum Ipsum", amount: "30", interval: 2) }
  before do
    @milestone = goal.milestones.build(amount: "20") 
  end

  subject { @milestone }

  it { should respond_to(:goal_id) }
  it { should respond_to(:amount) }
  # not sure why this isn't working
  it { should be_valid }

这可能与我创建@milestone 的方式有关吗?我试过goal.milestones.new,这似乎没有什么不同。在规范的下方,我对正确验证的字段进行了一些测试,并且运行良好。

有什么想法吗?

【问题讨论】:

  • 不要尝试验证它是否有效,而是调用valid?,然后检查错误数组是否为空。这将提供更有用的失败消息。

标签: ruby-on-rails rspec


【解决方案1】:

试试这个:

it "should be valid" do
  @milestone.valid?
  puts @milestone.errors.full_messages
end

这将运行验证并为您打印出验证错误,以便您查看发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2015-12-28
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多