Ruby on rails Shoulda/RSpec:确保验证消息;xxx“;在:基地

Ruby on rails Shoulda/RSpec:确保验证消息;xxx“;在:基地,ruby-on-rails,ruby,validation,rspec,shoulda,Ruby On Rails,Ruby,Validation,Rspec,Shoulda,我仍然对it{should(1).error_on(:base)}以及什么是特定的Shoulda matcher之类的东西背后的魔力感到困惑 我想确保:base包含错误消息“xxx”,那么我应该怎么做呢 it "should contain error message 'xxx'" do contact.valid? contact.errors[:base].should include('xxx') end 这是“走的路”,还是有更好的路?谢谢。好的,看起来不错。内联rspec测试

我仍然对
it{should(1).error_on(:base)}
以及什么是特定的Shoulda matcher之类的东西背后的魔力感到困惑

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

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

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

好的,看起来不错。内联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方法。它有时更可读。您不必为规范编写自我解释的描述;-)

对,看起来不错。内联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和before筛选器的提示。更简洁的是:it{subject.errors[:base]。应该包含'xxx'}。error[:which]现在返回数组,因此除非您匹配整个字符串,否则include不起作用。感谢使用subject和before筛选器的提示。更简洁的是:it{subject.errors[:base]。应该包含'xxx'}。error[:whater]现在返回一个数组,因此除非匹配整个字符串,否则include不起作用。