Дізнайтеся, як тестувати свої вправи з Haskell на Exercism
Виконайте наступну команду в каталозі вправи, щоб запустити тести:
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 у наборі тестів, зазвичай на початку:
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
Працюючи локально, можна використовувати будь-які пакети. А от онлайн test runner має доступ лише до обмеженого набору пакетів. Доступні такі пакети:
base, containers, array, time, mtl, deepseq, exceptions, bytestring), а такожЯкщо надіслати рішення, яке використовує недоступний пакет, то test runner натрапить на відсутність доступу до інтернету і видасть приблизно таку помилку:
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.