【问题标题】:Rails test validates_associated on model specRails 测试验证模型规范上的关联
【发布时间】:2012-12-25 19:17:22
【问题描述】:

有没有等价的

  it { should validate...


  it { should validate_uniqueness_of(

 validates_associated

类似的,

it { should validate_associate(:associated_model_object)

除了,你知道,功能。

谢谢!

【问题讨论】:

标签: ruby-on-rails ruby validation rspec rails-activerecord


【解决方案1】:

我认为这样的事情会起作用:

it "should validate associate_model_object" do
  m = Model.new(valid_params)
  m.associated_models.build(invalid_params)
  m.save.should eq(false)
end

如果你从另一个方向来,用这个替换中间线:

m.build_associated_model(invalid_params)

【讨论】:

  • 如果关联模型命名为Template,则应写为:m.build_template(...valid/invalid_params here...)
【解决方案2】:

由于没有内置的 validates_associated 匹配器,我写了这个:

it { is_expected.not_to validate_presence_of(:child) }

context 'when child is present' do
  let(:child) { FactoryBot.create(:child) }
  before { subject.child = child }
  it { is_expected.to be_valid }

  context 'when child is present but not valid' do
    before { child.age = -1 }
    it { is_expected.not_to be_valid }
  end
end

这一行:before { child.age = -1 } 需要了解Child 的验证。从Parent 的单元测试的上下文来看,这并不理想,但这肯定不是我犯过的最糟糕的编程罪。

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2023-03-07
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2018-10-02
    相关资源
    最近更新 更多