在sbt中定义自定义配置

cou*_*ech 8 scala sbt

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

我们有这个选择:

testOptions := Seq(Tests.Filter(s => Seq("Spec", "Unit").exists(s.endsWith(_))))
Run Code Online (Sandbox Code Playgroud)

testOptions如果test命令以某个范围为前缀,如何更改,所以只应用它teamcity:test

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

testOptions in Teamcity := ...
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*ota 14

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

使用itSettings

有一个IntegrationTest已经调用的内置配置.您可以通过编写以下内容在构建定义中定义它:

Defaults.itSettings
Run Code Online (Sandbox Code Playgroud)

这将使用与正常测试完全不同的设置,包括测试代码(进入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 */, ...) 
Run Code Online (Sandbox Code Playgroud)

定义团队城市:测试

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

编辑:马克哈拉斯向我指出,这里有一份文件.请参阅使用共享源的其他测试配置.

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

把它们放在一起

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"))
  )): _*)
Run Code Online (Sandbox Code Playgroud)

当您运行teamcity:testSpecs2输出显示没有颜色.