module Synopsis (main,spec) where import Control.Applicative ((<$>), (<*>)) import Test.Hspec (Spec, SpecWith, hspec, before, describe, it, shouldBe) import Test.Hspec.NeedEnv (EnvMode(Need), needEnv, needEnvRead) main :: IO () main = hspec spec -- | Read environment variables for parameters necessary for testing. getEnvs :: IO (String, Int) getEnvs = (,) <$> needEnv mode "TEST_USER_NAME" <*> needEnvRead mode "TEST_SEED" where mode = Need spec :: Spec spec = before getEnvs $ specWithUserAndSeed -- ^ Use 'before' and similar functions to write 'SpecWith' -- that takes parameters. -- | Test spec that depends on the environment variables. specWithUserAndSeed :: SpecWith (String, Int) specWithUserAndSeed = describe "funcUnderTest" $ do it "should do something" $ \(user_name, seed) -> do funcUnderTest user_name seed `shouldBe` "SOMETHING" funcUnderTest :: String -> Int -> String funcUnderTest = undefined