Sbt, testOptions для ScalaTest в многомодульном проекте - PullRequest
0 голосов
/ 13 июня 2019

У меня есть многомодульный проект Sbt.В этом проекте я использую ScalaTest и хотел бы создавать отчеты Html и Xml, сохраняя вывод консоли.

Я следовал этой статье на простом проекте, и все было хорошо: https://blog.ssanj.net/posts/2016-07-06-write-html-test-reports-with-scalatest-while-retaining-console-output.html

Но в моем многомодульном проекте кажется, что testOptions игнорируется.Эти настройки определены в общем определении настроек, которое повторно используется во всех модулях:

def settingsCommon: Seq[Setting[_]] = Seq(
  scalaVersion := DefaultScalaVersion,
  scalacOptions ++= Seq(
    "-feature",
    "-encoding", "utf8",
    ...
  ),
  testOptions in Test ++= Seq(
    Tests.Argument(TestFrameworks.ScalaTest, "-oDI"),
    Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/test-reports"),
    Tests.Argument(TestFrameworks.ScalaTest, "-u", "target/test-reports")
  ),
  ...
)

lazy val root = (project in file("."))
  .settings(settingsCommon)
  .aggregate(
    `shared`,
    `module-1`
  )

lazy val `shared` = (project in file("shared"))
  .settings(
    name := "shared"
  )
  .settings(settingsCommon)

lazy val `module-1` = (project in file("module-1"))
  .settings(settingsCommon)
  .dependsOn(`shared`)   

Проверка testOptions дает такой результат (который выглядит нормально):

sbt:my-project> inspect testOptions
[info] Task: scala.collection.Seq[sbt.TestOption]
[info] Description:
[info]  Options for running tests.
[info] Provided by:
[info]  ProjectRef(uri("file:/home/me/my-project/"), "root") / Test / testOptions
[info] Defined at:
[info]  /home/me/my-project/build.sbt:43
[info] Reverse dependencies:
[info]  Test / test / testOptions
[info]  Test / testQuick / testOptions
[info]  Test / testOnly / testOptions
[info] Delegates:
[info]  Test / testOptions
[info]  Runtime / testOptions
[info]  Compile / testOptions
[info]  testOptions
[info]  ThisBuild / Test / testOptions
[info]  ThisBuild / Runtime / testOptions
[info]  ThisBuild / Compile / testOptions
[info]  ThisBuild / testOptions
[info]  Zero / Test / testOptions
[info]  Zero / Runtime / testOptions
[info]  Zero / Compile / testOptions
[info]  Global / testOptions
[info] Related:
[info]  shared / Test / test / testOptions
[info]  module-1 / Test / testOptions
[info]  module-1 / Test / testOnly / testOptions
[info] ...

(/home/me/my-project/build.sbt:43 - это номер правой строки, в котором я определяю параметры)

Добавить в редактирование: Отображение параметров теста также выглядит хорошо:

sbt:my-project> ;reload;show testOptions
[info] Loading global plugins from /home/me/.sbt/1.0/plugins
[info] Loading settings for project backend-build from git.sbt,plugins.sbt ...
[info] Loading project definition from /home/me/my-project/project
[info] Loading settings for project root from build.sbt ...
[info] Resolving key references (26112 settings) ...
[info] Set current project to my-project (in build file:/home/me/my-project/)
[info] shared / Test / testOptions
[info]  List(Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-oDI)), Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-h, target/test-reports)), Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-u, target/test-reports)))

... The same for each modules ...
... Except one that is a Playframework module:
[info] play-module / Test / testOptions
[info]  List(Argument(Some(TestFramework(org.specs2.runner.Specs2Framework, org.specs2.runner.SpecsFramework)),List(sequential, true, junitxml, console)), Argument(Some(TestFramework(com.novocode.junit.JUnitFramework)),List(--ignore-runners=org.specs2.runner.JUnitRunner)), Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-oDI)), Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-h, target/test-reports)), Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-u, target/test-reports)))

Редактировать 2: и show testFrameworks отображать ScalaTest среди других:

[info]  List(TestFramework(org.scalacheck.ScalaCheckFramework), TestFramework(org.specs2.runner.Specs2Framework, org.specs2.runner.SpecsFramework), TestFramework(org.specs.runner.SpecsFramework), TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework), TestFramework(com.novocode.junit.JUnitFramework))

Несмотря на эту конфигурацию, у меня нет отчетов Html, только по умолчанию Xml и аргумент "-oDI" не имеютЭффект.

Можете ли вы помочь мне решить эту проблему?Спасибо

...