PIYO - Tech & Life -

seed_dumpを使ったRSpec高速化にはsequenceのリセットが必要だった

Rails RSpec

先日書いたこれが動かなくなってしまい、よく調べていたらプライマリキー(つまりid)が被って追加できないよってことになってしまったみたいです。

https://blog.piyo.tech/posts/2018-08-16-test-date-with-seed-dump/

確かに、関連を維持するためにidも含めてテストデータを登録していますので、sequenceの値がおかしくなっていた可能性があります。

そこで、seed.rbの最後に関連するテーブルに対してreset_pk_sequence!を呼ぶことでこの問題に対応しました。reset_pk_sequence!はDBがpostgresのときに使えます。

前回のParentChildの例をそのまま使うとすると、

klasses = [Parent, Child]
klasses.each do |klass|
  ApplicationRecord.connection.reset_pk_sequence!(klass.table_name)
end

とすればOKです。