RSpec / Shoulda validate_presence_of多个属性语法

时间:2016-06-14 09:20:00

标签: rspec shoulda

使用Shoulda / RSpec测试多个属性的validate_presence_of时,我会得到这些长而重复的代码块,如下所示:

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 个答案:

答案 0 :(得分:2)

据我所知,这里没有任何内置于Shoulda的内容。通常,您需要将选项链接到shoulda宏,例如.with_message(...),因此对于这些情况,您的语法建议是不可能的。

您可以改为执行以下操作:

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

但是,为了便于阅读和维护,我不会过分担心在测试套件中出现一些重复问题。

答案 1 :(得分:0)

您可以这样操作:

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