2016-03-21 46 views
6

这是一件令人气愤的事情,因为我已经构建了基于Hspec的测试套件,其中颜色的行为都正常。但是在这个项目中,当我一次运行所有测试套件时,我无法看到颜色。当使用“堆栈测试”时,我的hspec测试输出没有着色

我project.cabal设置是这样的:

test-suite unit 
    type:    exitcode-stdio-1.0 
    main-is:   SpecMain.hs 
    hs-source-dirs:  tests/unit 
    other-modules:  WikiSpec 
    default-language: Haskell2010 
    ghc-options:  -Wall -fno-warn-orphans -threaded 
    build-depends:  base     >=4.6 
    ... 

test-suite integration 
    type:    exitcode-stdio-1.0 
    main-is:   SpecMain.hs 
    hs-source-dirs:  tests/integration, webapp 
    other-modules:  ApiSpec 
    default-language: Haskell2010 
    ghc-options:  -Wall -fno-warn-orphans -threaded 
    build-depends:  base     >=4.6 
    ... 

然后我SpecMain.hs文件(相同的)包含本:

{-# OPTIONS_GHC -F -pgmF hspec-discover #-} 

所以,当我运行stack test,所有的我的测试运行,但输出没有彩色。如果我运行stack build --file-watch --test,测试会运行,但如果有任何故障,则所有输出都将显示为红色。最后,如果我运行stack test weblog:unitstack test weblog:integration,那么颜色就会完全按照它们的样子。标题为白色,通过测试为绿色,测试失败为红色,未决测试为黄色。

当我进行积极的开发时,我倾向于依靠stack build --file-watch --test,但我真的需要颜色是正确的。

有没有人知道发生了什么,我该如何解决这个问题,或者我需要提供哪些附加信息?

+2

哼,不能用不使用hspec-discover和Stack 1.0.4的变体重现。这就是说,你使用哪个外壳?另外,你是否尝试用'--test-arguments“--color”'手动着色输出? – Zeta

+0

这很有趣。 'stack test --test-arguments“--color”'起作用。这会有所帮助,但是这让我对我目前的项目与其他项目有何不同之处感到困惑。 –

回答

4

默认情况下,当输出显示在a terminal上,并且环境变量TERM不是"dumb"(或未设置)时,hspec将仅使用颜色。除非您将环境变量设置为"dumb",否则终端检测可能会出现问题。

无论哪种方式,stack build使您可以使用参数的测试套件与--test-arguments,并hspec解释几个命令行参数,包括--color--no-color其覆盖默认行为。因此,您可以强制使用以下颜色:

stack test --file-watch --test-arguments "--color" 
+0

好吧,那不是。终端设置为'xterm-256color'。如果我去同一个终端的另一个项目,'堆栈测试'显示颜色完全按照我的预期。不同的是,工作项目运行堆栈解析器3.15和破碎的项目再次运行堆栈解析器5.3 –

+0

@ SavanniD'Gerinel,我不能再现该行为。你能提供[mcve]吗? – Zeta

+0

这确实产生了彩色输出,但是当我调用堆栈测试时,我很喜欢它作为默认值。你知道一种方法(也许把它放在stack.yaml)归档这个?我试过 'build: test-arguments:[“--color”]'但它没有工作 – user3637541

0

堆栈使用您在给多个包测试一次时看到的行为。通常,这是因为您在stack.yaml文件的软件包节中列出了多个位置。

最近堆栈的版本提到在自动生成的stack.yaml文件中的以下内容:

# A package marked 'extra-dep: true' will only be built if demanded by a 
# non-dependency (i.e. a user package), and its test suites and benchmarks 
# will not be run. This is useful for tweaking upstream packages. 

如果选中所有,但在包装节一个位置为extra-dep,堆栈将恢复到单包行为当测试时,并按照您的预期显示您的着色测试结果。

相关问题