9

我想为在集成服务器和开发环境中运行测试设置另一组选项。

让我们有这个选项:

testOptions := Seq(Tests.Filter(s => Seq("Spec", "Unit").exists(s.endsWith(_))))

如何更改testOptions,因此仅在test命令以某种范围为前缀时才应用teamcity:test

我希望 testOptions 将使用类似的语法进行修改:

testOptions in Teamcity := ...

我也想知道,如何定义自定义范围,最好在简单*.sbt构建中,而不是在project/*.scala构建中。

4

1 回答 1

15

范围可以是项目、配置或任务。在这种情况下,我认为您正在寻找定义自定义配置。

使用它的设置

已经有一个内置配置IntegrationTest。您可以通过编写在构建定义中定义它:

Defaults.itSettings

这将使用与正常测试完全不同的设置,包括测试代码(进入src/it/scala/)和库,因此这可能不是您想要的。

定义自己的配置

使用 sbt 0.13,您可以在 build.sbt 中定义如下自定义配置:

val TeamCity = config("teamcity") extend(Test)

val root = project.in(file(".")).
  configs(TeamCity).
  settings(/* your stuff here */, ...) 

定义 teamcity:test

现在你必须弄清楚如何定义teamcity:test.

编辑:Mark Harrah 向我指出,有一个文档。请参阅使用共享源的附加测试配置

添加单独的测试源(和编译)集的替代方法是共享源。在这种方法中,源代码使用相同的类路径编译在一起并打包在一起。

把它们放在一起

val TeamCity = config("teamcity") extend(Test)

val root = project.in(file(".")).
  configs(TeamCity).
  settings( 
    name := "helloworld",
    libraryDependencies ++= Seq(
      "org.specs2" %% "specs2" % "2.2" % "test"
    )
  ).
  settings(inConfig(TeamCity)(Defaults.testTasks ++ Seq(
    testOptions := Seq(Tests.Argument("nocolor"))
  )): _*)

当您运行teamcity:testSpecs2 时,输出显示没有颜色。

于 2013-09-13T23:32:27.710 回答