我的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可以支持我吗?
答案 0 :(得分:1)
修正:
assert_raises ActiveRecord::RecordNotUnique do
FooBar.create do |sc|
sc.foo = foos(:one)
sc.bar = bars(:one)
end
end