hspec
shouldBeやshouldNotReturnなど
install
package.yamlのtestの項目にhspecを追加する
run
$ stack test
$ stack test --file-watch
ディレクトリ構成など
素直にこれに倣わないとだるい感じになる
テストされる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 -- ← ここに追加する
ファイル名をちゃんと付けるとModuleとテストファイルを結びつけてテストをしてくれる
src/Hoge.hsに対して、test/HogeSpec.hsと名付ける
何が嬉しいの?
code:hs
{-# OPTIONS_GHC -F -pgmF hspec-discover #-} $ stack install hspec-discover'
このコマンドしなくても使えたmrsekut.icon
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
特定の重要なテストケースのみをテストする
大きすぎて、全部実行すると時間がかかる場合など
実行できない
app/Main.hsのはimportできないのか #?? module ‘Main’ (test/Spec.hs) imports itselfになる
テストしたいものをsrc/Hoge.hs以下にいれてimport Hogeしたらできた
HogeSpec.hsのimportの部分がhieでエラーが出る
参考
hspec-discoverの導入
関連リンクも
同時実行