我有一个验证名称和术语接受度的模型
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:
答案 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)
不过,我不认为在控制器中测试模型验证是一个好主意。