2016-03-21 17 views
6

Questa è una cosa esasperante dal momento che ho creato suite di test basate su Hspec in cui tutti i colori si comportano normalmente. Ma su questo progetto, non riesco a far comparire i colori quando eseguo tutte le suite di test contemporaneamente.Quando si utilizza "stack test", il mio output di hspec test non è colorato

mio project.cabal è impostato in questo modo:

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 
    ... 

e poi il mio file SpecMain.hs (identici) contengono questo:

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

Così, quando corro stack test, tutti i miei test funzionano, ma l'output non è colorato. Se corro stack build --file-watch --test, i test vengono eseguiti, ma se c'è qualche errore allora tutto l'output è colorato in rosso. Infine, se corro stack test weblog:unit o stack test weblog:integration, i colori finiscono esattamente come dovrebbero essere. Le intestazioni sono bianche, i test di passaggio sono verdi, i test in errore sono rossi e i test in sospeso sono gialli.

Quando sto facendo sviluppo attivo tendo a dipendere da stack build --file-watch --test, ma ho davvero bisogno che i colori abbiano ragione.

Qualcuno di voi ha idea di cosa sta succedendo, come posso risolvere questo problema o quali informazioni aggiuntive devo fornire?

+2

Hm, non può riprodurre con una variante che non utilizza hspec-discover e Stack 1.0.4. Detto questo, quale shell usi? Inoltre, hai provato a colorare l'output manualmente con '--test-arguments" --color "'? – Zeta

+0

È interessante. 'stack test --test-arguments" --color "' funziona. Questo mi aiuterà, ma mi lascia disorientato su come il mio attuale progetto sia diverso dagli altri. –

risposta

4

Per impostazione predefinita, hspec utilizzerà i colori solo quando l'output viene visualizzato su a terminal e quando la variabile di ambiente TERM non è "dumb" (o non è impostata). A meno che non si imposti una variabile di ambiente su "dumb", è probabile che si stia verificando qualcosa con il rilevamento del terminale.

In entrambi i casi, stack build consente di utilizzare gli argomenti per le suite di test con --test-arguments e hspec interpreta diversi argomenti della riga di comando, tra cui --color e --no-color che sovrascrivere il comportamento predefinito. Pertanto, è possibile forzare i colori:

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

Beh, non è quello. Il terminale è impostato su 'xterm-256color'. Se vado a un altro progetto nello stesso terminale, 'stack test' visualizza i colori esattamente come mi aspetto. La differenza è che il progetto di lavoro esegue il risolutore di stack 3.15 e il progetto danneggiato esegue nuovamente il risolutore dello stack 5.3 –

+0

@ SavanniD'Gerinel, non riesco a riprodurre questo comportamento. Puoi fornire una [mcve]? – Zeta

+0

Questo produce effettivamente l'output colorato, ma mi piace che sia l'impostazione predefinita quando richiamo lo stack test. Sai un modo per (forse metterlo in qualche modo nello stack.yaml) per archiviarlo? Ho provato 'build: test-arguments: [" --color "]' ma non ha funzionato – user3637541

0

Stack utilizza il comportamento visualizzato quando si presta più di un pacchetto per testare alla volta. In genere, questo accade perché hai più di una posizione elencata nella stanza dei pacchetti del tuo file stack.yaml.

versioni recenti di pila menzionano quanto segue nella generata automaticamente stack.yaml di file:

# 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. 

Se si contrassegna tutte tranne una posizione nella pacchetti strofe come extra-dep, pila tornerà al suo comportamento unico pacchetto durante il test e mostra i risultati dei test colorati come previsto.

Problemi correlati