LoginSignup
5
6

More than 5 years have passed since last update.

SkinnyFrameworkのテストで自動ロールバックさせる

Posted at

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()
  }

}
5
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6