应该:测试validates_presence_of:on =>:update

jer*_*ith 5 unit-testing ruby-on-rails shoulda

我在我工作的一个项目中使用了Shoulda和Test :: Unit.我遇到的问题是我最近改变了这个:

class MyModel < ActiveRecord::Base
  validates_presence_of :attribute_one, :attribute_two
end
Run Code Online (Sandbox Code Playgroud)

对此:

class MyModel < ActiveRecord::Base
  validates_presence_of :attribute_one
  validates_presence_of :attribute_two, :on => :update
end
Run Code Online (Sandbox Code Playgroud)

以前,我的(传递)测试看起来像这样:

class MyModelTest < ActiveSupport::TestCase
  should_validate_presence_of :attribute_one, :attribute_two
end
Run Code Online (Sandbox Code Playgroud)

据我所知,没有参数should_validate_presence_of会导致此测试继续通过上面指定的更改.在测试需求时:attribute_two,没有放弃Shoulda ,有什么方法可以解决这个问题吗?

jon*_*net 7

这样的事情怎么办?(对于shoulda-matchers-3.1.1

subject { FactoryGirl.build(:your_model) }
it { is_expected.to validate_presence_of(:attribute_one) }
it { is_expected.to validate_presence_of(:attribute_two).on(:update) }
Run Code Online (Sandbox Code Playgroud)


tsd*_*own 2

过去我只是使用了一个小的自定义应该块来解决这个问题:

should "require :attr_two on update" do
  mm = Factory(:my_model)
  mm.attr_two = nil
  mm.save
  assert_equal false, mm.valid?
  assert_equal("can't be blank", mm.errors.on(:attr_two))
 end
Run Code Online (Sandbox Code Playgroud)

希望将来应该通过允许更多的 AR 验证选项来不断改进。让我知道你的想法,干杯。