【问题标题】:define custom configuration in sbt在 sbt 中定义自定义配置
【发布时间】:2013-11-30 18:04:13
【问题描述】:

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

让我们有这个选项:

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

如何更改testOptions,使其仅在test 命令以teamcity:test 之类的范围为前缀时才应用?

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

testOptions in Teamcity := ...

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

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

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

    使用它设置

    已经有一个名为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

    编辑: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 输出显示没有颜色。

    【讨论】:

    • 我照你说的做,但是在inConfig 设置中添加testOptions in AsyncTest := Seq(Tests.Filter(s => s.contains("Async"))) 仍然会运行整个测试套件async:test ...另外,如果我添加postLinkJSEnv in AsyncTest := new PhantomJSEnv(autoExit = false),那么它会使用默认的PhantomJSEnv 运行... inConfig 方法的第二个参数究竟是什么?
    • @lisak 似乎这是一个错误:github.com/sbt/sbt/issues/2340
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2014-06-03
    • 2014-07-07
    • 2016-12-22
    相关资源
    最近更新 更多