IntelliJ IDEAでsbtのテストをステップ実行する方法

IntelliJ IDEAでは、sbtからの実行でステップ実行をすることができる。

上の記事の手順と同様に、テスト実行時のJVMオプションを設定すれば、テストの実行もステップ実行で追うことがきるが、単純に javaOptions in Test ++= Seq("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005") みたいにしてしまうと、CI上で5005ポートのListenがなくてテストがフリーズしてしまう。

そこで以下のようにテスト設定をカスタマイズしよう。

lazy val commonSettings = Seq(
  scalaVersion := "2.11.4",
  organization := "com.example"
)
lazy val TestWithDebug = config("debug") extend(Test)

lazy val root = (project in file(".")).
  configs(TestWithDebug).
  settings(commonSettings: _*).
  settings(inConfig(TestWithDebug)(Defaults.testSettings): _*).
  settings(
    javaOptions in TestWithDebug ++= Seq("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005")
  )

こうしておけば

debug:test
debug:testOnly hoge

とコマンドを打ったときだけ5005ポートにデバッグ情報が送信されるようになるので、CIの邪魔にならない。