代码之家  ›  专栏  ›  技术社区  ›  Bergrebell

RSpec/Shoulda validate_presence_of multiple attributes语法

  •  0
  • Bergrebell  · 技术社区  · 8 年前

    测试时 validate_presence_of 对于使用Shoulda/RSpec的多个属性,我得到了如下长而重复的代码块:

    it { should validate_presence_of(:text) }
    it { should validate_presence_of(:user) }
    it { should validate_presence_of(:commentable) }
    [...]
    

    有没有办法把这个擦干?类似这样:

    it { should validate_presence_of(:text, :user, :commentable,...) }
    
    2 回复  |  直到 8 年前
        1
  •  5
  •   Othmane El Kesri    6 年前

    据我所知,Shoulda并没有内置此功能。通常,您会希望将选项链接到shoulda宏,例如。 .with_message(...) ,因此在这些情况下,您的语法建议是不可能的。

    你可以这样做:

    [:text, :user, :commentable].each do |field|
      it { should validate_presence_of(field) }
    end
    

    然而,为了更容易阅读和维护,我不会太担心在测试套件中有一点重复。

        2
  •  1
  •   K M Rakibul Islam    5 年前

    你可以这样做:

      describe "Validations" do
        %i[text user strict_start commentable].each do |field|
          it { is_expected.to validate_presence_of(field) }
        end
      end