2016-03-21 49 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,堆棧將恢復到單包行爲當測試時,並按照您的預期顯示您的着色測試結果。

相關問題