【问题标题】:Shoulda/RSpec: Make sure that validation message "xxx" is on :base应该/RSpec:确保验证消息“xxx”在:base
【发布时间】:2012-07-12 13:42:14
【问题描述】:

我仍然对 it { should have(1).error_on(:base) } 之类的东西背后的魔法以及什么是特定的 Shoulda 匹配器感到很困惑。

我想确保:base 包含错误消息“xxx”,我应该怎么做呢?

it "should contain error message 'xxx'" do
  contact.valid?
  contact.errors[:base].should include('xxx')
end

这是“要走的路”,还是有更好的?谢谢。

【问题讨论】:

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


    【解决方案1】:

    好吧,看起来不错。内联 rspec 测试正在使用主题。你可以像这样重写你的测试:

    describe 'my method' do
      before { contact.valid? }
    
      context 'contact is not valid' do
        subject { contact.errors[:base] }
        it { should include 'xxx' }
      end
    end
    

    在主题上调用 should 方法。有时它可能更具可读性。而且您不必为不言自明的规格编写描述;-)

    【讨论】:

    • 感谢主题和过滤器之前的提示。
    • 更简洁:它 { subject.errors[:base].should include 'xxx' }
    • .error[:whatever] 现在返回一个数组,因此除非匹配整个字符串,否则 include 不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多