hspec
shouldBe
や shouldNotReturn
など
install
package.yaml
のtestの項目に hspec
を追加する
run
$ stack test
$ stack test --file-watch
ディレクトリ構成など
素直にこれに倣わないとだるい感じになる
テストされるmodule側
app
ではなく、 src
配下におく
テスト関係
Spec.hs
以下の1行のみを書く
HogeSpec.hs
src配下と全く同じ構造下に、この命名規則のファイルを置く
test/Hoge/HogeSpec.hsmodule Hoge.HogeSpec (spec) where
import Test.HSpec
spec :: Spec
spec = undefined -- ルートとなる関数
.cabal
を書き換える
おそらく自動でやってくれるが一応メモ
hoge.cabaltest-suite comp-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
HogeSpec -- ← ここに追加する
ファイル名をちゃんと付けるとModuleとテストファイルを結びつけてテストをしてくれる
src/Hoge.hs
に対して、 test/HogeSpec.hs
と名付ける
何が嬉しいの?
hs{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
$ stack install hspec-discover'
このコマンドしなくても使えた

HogeSpec
で、 src/Piyo.hs
のやつをimportできない
errorCould not find module ‘Piyo’
Use -v (or `:set -v` in ghci) to see a list of the files searched for.typecheck
特定の重要なテストケースのみをテストする
大きすぎて、全部実行すると時間がかかる場合など
実行できない
app/Main.hs
のはimportできないのか
#?? module ‘Main’ (test/Spec.hs) imports itself
になる
テストしたいものを src/Hoge.hs
以下にいれて import Hoge
したらできた
HogeSpec.hsのimportの部分がhieでエラーが出る
参考
hspec-discoverの導入
関連リンクも
同時実行