hspec-discover
custom と一緒に使おうとしていますMain
。CustomMain
は、bracket
すべての で使用されるファイル記述子を作成する ですSpec
。
これは私のSpec.hs
です:
{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-}
これは私のMain.hs
です:
module Main (main) where
import Control.Exception
import System.Posix.IO
import System.Posix.Files
import Test.Hspec
import Spec (spec)
main :: IO ()
main = bracket
(openFd verybigFile ReadWrite (Just 384) defaultFileFlags)
(\fd -> closeFd fd >> removeLink verybigFile)
(\fd -> hspec (spec fd))
where
verybigFile = "test/verybigFile"
spec
個々の自動検出モジュールでファイル記述子引数を受け入れるには、次のように宣言する必要があります
spec :: Fd -> Spec
しかしhspec-discover
、仕様が次のように宣言されることを要求します
spec :: Spec
そうしないと、自動生成されたモジュールはコンパイルされません。
test/Spec.hs:8:68:
Couldn't match type `System.Posix.Types.Fd -> Spec'
with `hspec-core-2.1.7:Test.Hspec.Core.Spec.Monad.SpecM () ()'
Expected type: hspec-core-2.1.7:Test.Hspec.Core.Spec.Monad.SpecWith
()
Actual type: System.Posix.Types.Fd -> Spec
In the second argument of `describe', namely `SendfileSpec.spec'
In the second argument of `postProcessSpec', namely
`(describe "Sendfile" SendfileSpec.spec)'
In the expression:
postProcessSpec
"test/SendfileSpec.hs" (describe "Sendfile" SendfileSpec.spec)
では、自動検出を妨げずに仕様に引数を渡すにはどうすればよいでしょうか? 私の想像力はIORef
's に向かって流れますが、その考えは私を身震いさせます。それを行う正しい方法は何ですか?