やりたいこと
SQLite3にもユニーク制限をかけているのでそれをminitestで確認したい
環境
os:Windows 7
ruby:2.4.0
rails:5.0.2
方針
Modelにもvalidationを設定しているので直接SQLを発行して例外が発生すること検証する。
テストコード
user_test.rb
test "Unique constraint of name by sql" do
User.create(name: 'hoge')
before_user_count = User.all.length
assert_raise(ActiveRecord::RecordNotUnique, "Not find exception") do
con = ActiveRecord::Base.connection
con.execute("INSERT INTO users(name) VALUES('hoge')")
end
after_user_count = User.all.length
assert_equal(before_user_count, after_user_count)
end
その他
そういえば、これを実装した後にsaveのオプションにvalidate: falseがあったのを思い出した(ただし記憶は大分古い)
今のrailsでも対象のオプションが存在するならそっちを使ったほうが明らかに速い気がする。