了解如何在 Exercism 上測試你的 Haskell 練習
在練習目錄中執行下列指令來執行測試:
stack test
如果想在每次儲存檔案時執行測試,請改用這個指令:
stack test --file-watch
No .cabal file found in directory
你用的可能是舊版的 stack,需要升級。
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
照著它說的做就對了,它會下載並安裝正確的編譯器版本:
stack setup
練習的解答是一個 Haskell 模組。模組名稱定義在測試套件裡的匯入敘述中,通常位於開頭:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
在這個例子中,測試檔在第 4 行匯入了一個名為 ModuleName 的模組,該模組匯出一個名為 someFunc 的函式。這表示你必須建立一個名為 ModuleName.hs 的檔案,內容大致如下:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
你會發現在 src/ 裡已經有同名檔案,可以把它當作解答的起點。
只要記得,這個起始範本只是為了讓你踏出第一步。如果你認為有必要,儘管把它整個改掉。
如果你想用一些套件寫出更優雅的解答,請先在 package.yaml 中把這些套件加入解答的相依套件:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
在本機開發時,你可以使用任何你喜歡的套件。不過,線上測試執行器只能使用有限的套件。可用的套件包括
base、containers、array、time、mtl、deepseq、exceptions、bytestring),以及如果你提交的解答使用了無法取得的套件,測試執行器會因為沒有網路連線而產生像這樣的錯誤:
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 ...)
如果你想在 GHCi 中試玩自己的解答,只要執行這個指令:
stack ghci
強烈建議你對解答執行 hlint,看看它能不能抓到你漏掉的問題:
hlint ModuleName.hs
你不一定要接受 hlint 給的所有建議,但這些建議通常能幫助你學會怎麼寫出漂亮又道地的 Haskell 程式碼。