【问题标题】:Shoulda: Test validates_presence_of :on => :update应该:测试 validates_presence_of :on => :update
【发布时间】:2010-01-05 21:19:46
【问题描述】:

在我从事的一个项目中,我将 Shoulda 与 Test::Unit 结合使用。我遇到的问题是我最近改变了这个:

class MyModel < ActiveRecord::Base
  validates_presence_of :attribute_one, :attribute_two
end

到这里:

class MyModel < ActiveRecord::Base
  validates_presence_of :attribute_one
  validates_presence_of :attribute_two, :on => :update
end

以前,我的(通过)测试是这样的:

class MyModelTest < ActiveSupport::TestCase
  should_validate_presence_of :attribute_one, :attribute_two
end

据我所知,should_validate_presence_of 没有任何参数会导致该测试继续通过上面指定的更改。在测试:attribute_two的需求时没有放弃Shouda,有什么办法可以解决吗?

【问题讨论】:

    标签: ruby-on-rails unit-testing shoulda


    【解决方案1】:

    这样的事情呢? (对于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) }
    

    【讨论】:

      【解决方案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
      

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

      【讨论】:

        【解决方案3】:

        在 Rspec 中,您可以执行以下操作:

        describe MyModelTest do
          describe "validations" do
            should_validate_presence_of :attribute_one
        
            context "on update" do
              subject { FactoryGirl.create(:my_model_test) }
        
              should_validate_presence_of :attribute_two
            end
          end
        end
        

        【讨论】:

          【解决方案4】:

          我尝试了类似于 tsdbrown 建议的解决方案。当我有这种类型的测试时:

          validates_presence_of :attr_two
          

          但如果我将模型更改为:

          ,测试将失败
          validates_presence_of :attr_two, :on => :save
          

          它失败是因为 :attr_two 错误是 [] 而不是 ["can't be blank"]

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-25
            • 2023-02-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多