ポータルシットをLokkaに置き換えたくていろいろやってる。ポータルシットの過去記事をYAMLでエクスポートし、それをLokkaのDBに取り込む作業をやってる。TDD BootCampに参加したので、テストファーストしながらの作業。RSpecでテストコードを書き、ログが正しくインポートできることを確認する。テスト終了時 after(:all)
フックで、取り込んだログを削除してる。コードはこんな感じ。ちなみにLokkaはDataMapperをORMに採用してるので以下はDataMapperでの話。
after(:all) do
Category.all.destroy
Entry.all.destroy
end
しかしこれでは AUTO INCREMENT
の値がリセットされず、テストを繰り返す度に AUTO INCREMENT
の値が増えていってうざかった。
DataMapperの機能で AUTO INCREMENT
値をリセットするのってないのかなと5秒くらい探してみたけど見つからなかったので、SQLを直接実行する方法を採用した。
ちなみにRDBMSに採用してるのはSQLite3。SQLiteでは UPDTE sqlite_sequence SET seq=0 WHERE name='テーブル名';
みたいなコードで AUTO INCREMENT
値を任意の値に設定できるみたい。
最終的な after(:all)
フックはこんな感じ。
after(:all) do
Category.all.destroy
Entry.all.destroy
Entry.repository.adapter.execute('update sqlite_sequence set seq=0 where name="entries";')
end
テスト実行後にはすべてのデータがデータベースから削除されて、AUTO INCREMENT
の値もリセットされる。人畜無害なテストコード万歳。