RSpec Catch验证错误

时间:2015-02-11 21:55:55

标签: ruby-on-rails rspec rspec3

我有一个验证名称和术语接受度的模型

class Product < ActiveRecord::Base

  validates :name, presence: true,
            length: { maximum: 50 }, on: :update

  validates_acceptance_of :agreed_to_terms, on: :update

我写了一个简单的测试

  it 'redirects back if there is missing info' do
    post "/product/1", {:name => "john"}

    expect(ActiveRecord).to raise_error(StatementInvalid)
  end

我似乎无法发现错误。

 ActiveRecord::StatementInvalid:
   SQLite3::ConstraintException: NOT NULL constraint failed:

2 个答案:

答案 0 :(得分:1)

试试这个

it 'redirects back if there is missing info' do
  expect {
    post "/product/1", {:name => "john"}
  }.to raise_error(ActiveRecord::StatementInvalid)
end

答案 1 :(得分:0)

expect() raise_error表示()中的代码引发错误,显然当您调用ActiveRecord时不会触发它。

你可以这样试试。

expect{
    post "/product/1", {:name => "john"}
 }.to raise_error(StatementInvalid)
不过,我不认为在控制器中测试模型验证是一个好主意。