2016-03-21 12 views
6

To jest denerwujące, ponieważ zbudowałem zestawy testowe oparte na Hspec, w których kolory zachowują się normalnie. Ale w tym projekcie nie mogę uzyskać kolorów, które pojawią się, gdy uruchomię wszystkie pakiety testowe naraz.Podczas korzystania z "testu stosu" moje wyniki testów hspec nie są kolorowane.

Moja project.cabal jest skonfigurowany tak:

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

a następnie moje SpecMain.hs plików (identyczne) zawierają w tym:

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

Więc, kiedy biegnę stack test wszystkie moje testy działają, ale dane wyjściowe nie są kolorowane. Jeśli uruchomię stack build --file-watch --test, testy zostaną uruchomione, ale jeśli wystąpi jakikolwiek błąd, wszystkie dane wyjściowe będą miały kolor czerwony. Na koniec, jeśli uruchomię stack test weblog:unit lub stack test weblog:integration, kolory kończą się dokładnie tak, jak powinny. Nagłówki są białe, testy przejścia są zielone, testy błędów są czerwone, a testy oczekujące są żółte.

Kiedy robię aktywny rozwój, zależy mi na stack build --file-watch --test, ale naprawdę potrzebuję kolorów, aby mieć rację.

Masz pomysł, co się dzieje, jak mogę to naprawić lub jakie dodatkowe informacje muszę podać?

+2

Hm, nie może się powielać z wariantem, który nie używa hspec-discover i Stack 1.0.4. Biorąc to pod uwagę, której powłoki używasz? Czy próbowałeś ręcznie pokolorować dane wyjściowe za pomocą '--test-arguments" --color "'? – Zeta

+0

To interesujące. 'stack test --test-arguments" --color "' działa. Pomoże to, ale pozostawia mnie w zdumieniu, że mój obecny projekt różni się od innych. –

Odpowiedz

4

domyślnie będzie hspec używać tylko kolory, gdy wyjście jest pokazany na a terminal a gdy zmienna TERM nie jest "dumb" (lub nie jest ustawiona). Jeśli nie ustawisz zmiennej środowiskowej na "dumb", prawdopodobnie dzieje się coś z wykrywaniem terminalu.

Tak czy inaczej, stack build umożliwia korzystanie z argumentów za testowych z --test-arguments i hspec interpretuje kilka argumentów wiersza poleceń, w tym --color i --no-color który nadpisać domyślne zachowanie. W związku z tym, można wymusić kolory:

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

Cóż, to nie to. Terminal jest ustawiony na 'xterm-256color'. Jeśli przejdę do innego projektu w tym samym terminalu, 'test stosu' wyświetla kolory dokładnie tak, jak oczekuję. Różnica polega na tym, że projekt roboczy uruchamia program rozpoznawania stosów w wersji 3.15, a w zepsutym projekcie uruchamia program rozpoznawania stosu 5.3 –

+0

@ SavanniD'Gerinel ponownie, nie mogę odtworzyć tego zachowania. Czy możesz podać [mcve]? – Zeta

+0

Powoduje to, że faktycznie powstaje kolorowy wydruk, ale ja lubię go jako domyślny, gdy wywołuję test stosu. Czy znasz sposób (może umieścić go w jakiś sposób w pliku stack.yaml), aby to zarchiwizować? Próbowałem 'build: argumenty testowe: [" --color "]' ale to nie działało – user3637541

0

Stos używa zachowanie widzisz kiedy dać mu więcej niż jeden pakiet, aby przetestować na raz. Zazwyczaj dzieje się tak, ponieważ w sekcji pakietów pliku stack.yaml znajduje się więcej niż jedna lokalizacja.

Najnowsze wersje stosie wspomnieć o następujących auto generowane stack.yaml pliku:

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

Jeśli zaznaczysz wszystkie oprócz jednego miejsca w strofie pakietów jako extra-dep, stos powróci do zachowania pojedynczego pakietu podczas testowania i pokaż wyniki testu kolorystycznego zgodnie z oczekiwaniami.