Skip to content
Yuki Yoshinoya edited this page Mar 3, 2015 · 25 revisions

You can use test helper for specs2.

add sbt settings

Add the following settings in build.sbt or project/Build.scala.

libraryDependencies ++= Seq(
  "com.github.aselab" %% "scala-activerecord" % "0.3.1",
  "com.github.aselab" %% "scala-activerecord-specs" % "0.3.1" % "test",
  "org.specs2" %% "specs2-core" % "2.4.16" % "test"
)

application.conf example

run.mode is test in Test.

test {
  driver = "org.h2.Driver"
  jdbcurl = "jdbc:h2:mem:test"
}

Changing Schema class

By default, schema class is models.Tables.

If you would be change the schema class, please describe in some.packages.SchemaTables.[running mode].[setting key] = [setting value] format.

some.packages.SchemaTables {
  test {
    driver = "org.h2.Driver"
    jdbcurl = "jdbc:h2:mem:test"
    autoCreate = true
    autoDrop = true
  }
}

Test examples

You can use the com.github.aselab.activerecord.ActiveRecordSpecification trait.

import com.github.aselab.activerecord._

object SomeModelSpecs extends ActiveRecordSpecification {
  // You can override schema class in this specs (default models.Tables)
  override def schema = some.packages.models.SomeTables

  // You can override database configuration in this specs
  override def config = Map(
    "jdbcurl" -> "jdbc:h2:mem:tables"
  )

  // You can override beforeAll hook
  override def beforeAll = {
    // initialize schema
    super.beforeAll
    // test data creation
    SomeModel("test1").create
  }

  // afterAll hook
  override def afterAll = {
    super.afterAll // reset database and cleanup sessions
  }

  "sample" should {
    // Some specifications code
  }
}

Auto rollback for each created examples

With mixin com.github.aselab.activerecord.AutoRollback trait, automatically rollback for each created examples:

import com.github.aselab.activerecord._

object SomeModelSpecs extends ActiveRecordSpecification with AutoRollback {
  // beforeAll does not rollback
  override def beforeAll = {
    super.beforeAll
    SomeModel("prepared1").create
    SomeModel("prepared2").create
    SomeModel("prepared3").create
  }

  "context" should {
    "specification example1" in {
       SomeModel("test1").create
       SomeModel("test2").create
       SomeModel("test3").create
       SomeModel.count mustEqual 6
    }

    "specification example2" in {
       SomeModel.count mustEqual 3
    }
  }
}
Clone this wiki locally