Rails:如何断言MySQL抛出重复的条目错误

时间:2014-07-28 20:59:18

标签: ruby-on-rails activerecord

我的FooBar表上有一个唯一性约束(在数据库级别)。

# I have this in my migration
add_index :foo_bars, [:foo_id, :bar_id], :unique => true

我很高兴地说MySQL能够完成它的工作,并可靠地防止此表中的重复条目。但是我该怎么测试呢?这是我尝试过的:

test 'can not be a dup' do
  assert_no_difference('FooBar.count') do
    FooBar.create do |sc|
      sc.foo = foos(:one)
      sc.bar   = bars(:one)
    end
  end
end

使用以下输出运行:

FooBar#test_can_not_be_a_dup:
ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry '206867376-519457691' for key 'index_foo_bars_on_foo_id_and_bar_id'

所以测试没有完成。

我可以在事务或其他内容中运行我的测试,a)确保它已回滚,并且b)确保回滚的原因是ActiveRecord :: RecordNotUnique:Mysql2 :: Error?

或者我应该只相信MySQL / ActiveRecord可以支持我吗?

1 个答案:

答案 0 :(得分:1)

修正:

assert_raises ActiveRecord::RecordNotUnique do
  FooBar.create do |sc|
    sc.foo = foos(:one)
    sc.bar = bars(:one)
  end
end