Tanuld meg, hogyan teszteld a Haskell feladataidat az Exercism-ön
A tesztek futtatásához hajtsd végre a következő parancsot a feladat könyvtárában:
stack test
Ha minden fájlmentésnél le szeretnéd futtatni a teszteket, akkor helyette ezt a parancsot futtasd:
stack test --file-watch
No .cabal file found in directory
Valószínűleg a stack egy régi verzióját használod, és frissítened kell.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
Csak tedd azt, amit ír, és le fogja tölteni, majd telepíteni a megfelelő fordítóverziót:
stack setup
Egy feladat megoldása egy Haskell-modul. A modul nevét a tesztekben egy import utasítás határozza meg, általában a legelején:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
Ebben a példában a tesztfájl a 4. sorban importál egy ModuleName nevű modult, amely egy someFunc nevű függvényt exportál. Ez azt jelenti, hogy létre kell hoznod egy ModuleName.hs nevű fájlt, amely valahogy így néz ki:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
Találsz majd egy ilyen nevű fájlt a src/ könyvtárban, amelyet kiindulópontként használhatsz a megoldásodhoz.
Csak tartsd észben, hogy ez a váz csak azért van ott, hogy elindulhass vele. Nyugodtan átalakíthatod teljesen, ha úgy gondolod, hogy az a helyes.
Ha néhány csomag használatával elegánsabb megoldást szeretnél írni, először add hozzá a csomagokat a megoldásod függőségeihez a package.yaml fájlban:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
Amíg helyben dolgozol, bármilyen csomagot használhatsz, amit csak szeretnél. Az online tesztfuttató azonban csak korlátozott számú csomaghoz fér hozzá. A rendelkezésre álló csomagok:
base, containers, array, time, mtl, deepseq, exceptions, bytestring), valamintHa olyan megoldást küldesz be, amely egy nem elérhető csomagot használ, akkor a tesztfuttató belefut abba, hogy nincs internet-hozzáférése, és egy ilyen hibaüzenetet ad:
Cabal file info not found for unavailable-package-1.0@..., updating
Selected mirror https://hackage.haskell.org/
Downloading root
HttpExceptionRequest Request {
host = "hackage.haskell.org"
...
}
(ConnectionFailure ...)
Ha szeretnél játszani a megoldásoddal a GHCi-ben, csak futtasd ezt a parancsot:
stack ghci
Erősen ajánlott, hogy futtasd a hlint-et a megoldásodon, hogy lássd, elkap-e valamit, amit kihagytál:
hlint ModuleName.hs
Nem kell elfogadnod a hlint összes javaslatát, de általában segítenek megtanulni, hogyan írj szép, idiomatikus Haskell-kódot.