当返回的消息是'ActiveRecord :: RecordInvalid'时,为什么这个rspec'期望raise_error'失败?

And*_*vey 1 rspec ruby-on-rails

以下rspec测试失败,但是与失败测试一起提供的消息似乎是预期的结果.

describe '#validate_maximum_pending_actions_not_been_reached' do
  let(:action) { build :action, status: 'pending' }
  before :each do
    10.times do
      create :action, status: 'pending'
    end
  end
  it 'does not save the 11th action' do
    expect(action.save).to raise_error #(ActiveRecord::RecordInvalid,'Validation failed: maximum number of pending actions already reached')
  end
end


Failure/Error: let(:action) { build :action, status: 'pending' }
  ActiveRecord::RecordInvalid:
    Validation failed: maximum number of pending actions already reached
Run Code Online (Sandbox Code Playgroud)

我通过省略错误消息尝试不那么具体,只是期望测试会raise_error.测试仍然失败,但是给出了上面的描述,表明确实出现了错误.

我究竟做错了什么?

正在测试的方法如下:

validate :validate_maximum_pending_actions_not_been_reached
def validate_maximum_pending_actions_not_been_reached
  errors[:base] << "maximum number of pending actions already reached" unless Action.where(status: 'pending').size <= 10
end
Run Code Online (Sandbox Code Playgroud)

Tan*_*nak 6

您的规范应该在这样的块中.此外,您还可以使用错误类指定错误

  it 'does not save the 11th action' do
    expect{ action.save! }.to raise_error(ActiveRecord::RecordInvalid) #(ActiveRecord::RecordInvalid,'Validation failed: maximum number of pending actions already reached')
  end
Run Code Online (Sandbox Code Playgroud)