在sbt中定义自定义配置

时间:2013-09-13 15:01:45

标签: scala sbt

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

我们有这个选项:

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

如果testOptions命令带有test等范围前缀,那么如何更改teamcity:test,只应用它?

我希望testOptions可以用类似的语法修改:

testOptions in Teamcity := ...

我还想知道,如何定义自定义范围,最好是简单的*.sbt版本,而不是project/*.scala版本。

1 个答案:

答案 0 :(得分:14)

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

使用itSettings

已经有一个名为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向我指出,这里有一份文档。请参阅Additional test configurations with shared sources

  

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

把它们放在一起

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:test时,Specs2输出显示为无颜色。