2016-03-21 6 views
6

Dies ist eine ärgerliche Sache, da ich Hspec-basierte Test-Suiten gebaut haben, in denen Farben alle normal verhalten. Aber bei diesem Projekt kann ich keine Farben bekommen, wenn ich alle Testsuites gleichzeitig starte.Bei Verwendung von "Stack-Test" ist meine hspec Tests Ausgabe nicht eingefärbt

Mein project.cabal ist wie folgt aufgebaut:

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

Und dann meine SpecMain.hs Dateien (identisch) enthalten diese:

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

Also, wenn ich stack test laufen, die alle Meine Tests laufen, aber die Ausgabe wird nicht eingefärbt. Wenn ich stack build --file-watch --test ausführen, werden die Tests ausgeführt, aber wenn überhaupt ein Fehler auftritt, wird die gesamte Ausgabe rot dargestellt. Schließlich, wenn ich stack test weblog:unit oder stack test weblog:integration ausführen, dann enden die Farben genau so, wie sie sein sollten. Header sind weiß, bestandene Tests sind grün, fehlgeschlagene Tests sind rot und ausstehende Tests sind gelb.

Wenn ich aktive Entwicklung mache, neige ich dazu, auf stack build --file-watch --test zu hängen, aber ich brauche wirklich die Farben, um richtig zu sein.

Haben Sie irgendwelche Ahnung, was los ist, wie kann ich das beheben, oder welche zusätzlichen Informationen muss ich bereitstellen?

+2

Hm, kann nicht mit einer Variante reproduzieren, die hspec-discover und Stack 1.0.4 nicht verwendet. Davon abgesehen, welche Shell verwendest du? Haben Sie auch versucht, die Ausgabe manuell mit '--test-arguments 'einzufärben --color" '? – Zeta

+0

Das ist interessant. 'Stapeltest - Testargumente" --color "' funktioniert. Das wird helfen, aber es lässt mich erstaunt sein, dass mein aktuelles Projekt sich von anderen unterscheidet. –

Antwort

4

Standardmäßig verwendet hspec nur Farben, wenn der Ausgang unter angezeigt wird und wenn die Umgebungsvariable nicht "dumb" ist (oder nicht gesetzt ist). Wenn Sie keine Umgebungsvariable auf "dumb" setzen, ist wahrscheinlich etwas mit der Terminalerkennung passiert.

So oder so, stack build können Sie Argumente für Testsuiten mit --test-arguments verwenden, und hspec interpretiert mehrere Befehlszeilenargumente, einschließlich --color und --no-color, die das Standardverhalten überschreiben. Daher können Sie die Farben erzwingen:

+0

Nun, das ist es nicht. Das Terminal wird auf 'xterm-256color' gesetzt. Wenn ich zu einem anderen Projekt im selben Terminal gehe, zeigt 'stack test' die Farben genau so an, wie ich es erwarte. Der Unterschied ist, dass das Arbeitsprojekt Stack Resolver 3.15 ausführt und das defekte Projekt Stack Resolver 5.3 –

+0

@ SavanniD'Gerinel wieder, ich kann dieses Verhalten nicht reproduzieren. Kannst du ein [MCVE] zur Verfügung stellen? – Zeta

+0

Dies erzeugt in der Tat farbige Ausgabe, aber ich möchte es als Standard, wenn ich Stack-Test aufrufen. Kennst du einen Weg (um es vielleicht irgendwie in den Stack zu legen.) Um das zu archivieren? Ich versuchte 'build: test-Argumente: [" --color "]' aber es hat nicht funktioniert – user3637541

0

Stack verwendet das Verhalten, das Sie sehen, wenn Sie mehr als ein Paket gleichzeitig testen. In der Regel tritt dies auf, weil Sie mehr als einen Speicherort in der Paketzeilengruppe Ihrer stack.yaml-Datei aufgelistet haben.

Neuere Versionen des Stapels die folgenden in der automatisch generierten stack.yaml Datei erwähnen:

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

Wenn Sie alle bis auf einen Standort in den Paketen Strophe als extra-dep markieren, Stapel wird auf seiner Single-Paket Verhalten zurückkehren beim Testen und zeigen Sie Ihre eingefärbten Testergebnisse wie erwartet.