hspec
Haskellのテストのためのライブラリ
docs
github
example
マッチャー一覧 ref
shouldBeやshouldNotReturnなど
install
package.yamlのtestの項目にhspecを追加する
run
$ stack test
$ stack test --file-watch
ディレクトリ構成など
exampleを参考にすれば良い
素直にこれに倣わないとだるい感じになる
テストされるmodule側
appではなく、src配下におく
テスト関係
Spec.hs
以下の1行のみを書く
code:test/Spec.hs
{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
HogeSpec.hs
src配下と全く同じ構造下に、この命名規則のファイルを置く
code:test/Hoge/HogeSpec.hs
module Hoge.HogeSpec (spec) where
import Test.HSpec
spec :: Spec
spec = undefined -- ルートとなる関数
.cabalを書き換える
おそらく自動でやってくれるが一応メモ
code:hoge.cabal
test-suite comp-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
HogeSpec -- ← ここに追加する
hspec-discover
hackage
ファイル名をちゃんと付けるとModuleとテストファイルを結びつけてテストをしてくれる
src/Hoge.hsに対して、test/HogeSpec.hsと名付ける
何が嬉しいの?
これを使わないときにどのへんが大変なのか #??
code:hs
{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
$ stack install hspec-discover'
このコマンドしなくても使えたmrsekut.icon
https://fujimura.hatenablog.com/entry/2015/12/15/214332
#やりたいこと
HogeSpecで、src/Piyo.hsのやつをimportできない
code:error
Could not find module ‘Piyo’
Use -v (or :set -v in ghci) to see a list of the files searched for.typecheck
特定の重要なテストケースのみをテストする
http://hackage.haskell.org/package/hspec-2.7.1/docs/Test-Hspec.html#g:5
大きすぎて、全部実行すると時間がかかる場合など
実行できない
app/Main.hsのはimportできないのか #??
module ‘Main’ (test/Spec.hs) imports itselfになる
テストしたいものをsrc/Hoge.hs以下にいれてimport Hogeしたらできた
#??
HogeSpec.hsのimportの部分がhieでエラーが出る
普通にコンパイルは通るので❌HIEが悪いのかな
参考
テストフレームワーク (hspec)
hspec-discoverの導入
Hspecベストプラクティス - fujimuradaisuke's blog
関連リンクも
https://zenn.dev/nakaakist/articles/6deeb888da2224
同時実行