SkinnyFrameworkでDB関連のテストをする場合には、標準ではScalikeJDBCの
scalikejdbc.scalatest.AutoRollbackを使うことになります。
ですが、scalikejdbcのAutoRollbackはDBSessionをimplicitで渡しまわすことで実現しているため、セッションを渡せなくなった時点で機能になくなります。
一方、Skinny内ではAutoSessionFeature#autoSessionによって、スレッドローカルのDBSessionオブジェクトを取得する機能があります。
そこで、autoSessionを利用している限りはセッションを共有できるようにする機能を作ってみました。
package test
import org.scalatest.{Suite, BeforeAndAfter}
import scalikejdbc.{ConnectionPool, ThreadLocalDB}
trait EasyAutoRollback extends BeforeAndAfter { self: Suite =>
before {
Option(ThreadLocalDB.load()).getOrElse {
ThreadLocalDB.create(ConnectionPool.borrow())
}.beginIfNotYet()
}
after {
ThreadLocalDB.load().rollbackIfActive()
}
}