1

hspec-discovercustom と一緒に使おうとしています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 に向かって流れますが、その考えは私を身震いさせます。それを行う正しい方法は何ですか?

4

1 に答える 1