这就是我所拥有的:
spec :: Spec
spec = do
manager <- runIO newManager
it "foo" $ do
-- code that uses manager
it "bar" $ do
-- code that usees manager
runIO
的文档建议我应该使用beforeAll
,因为我不需要manager
构建规范树,我只是需要它来运行每个测试,在我的用例中,他们最好共享同一个经理,而不是为每个测试创建一个新的。
如果您不需要IO操作的结果来构建spec树,则beforeAll可能更适合您的用例。
beforeAll :: IO a -> SpecWith a -> Spec
但我无法弄清楚如何从测试中访问管理器。
spec :: Spec
spec = beforeAll newManager go
go :: SpecWith Manager
go = do
it "foo" $ do
-- needs "manager" in scope
it "bar" $ do
-- needs "manager" in scope
答案 0 :(得分:6)
将spec参数作为常规函数参数传递给它的块(如果你想了解正在发生的事情,请查看Example
类型类的相关类型)。一个完全独立的例子是:
import Test.Hspec
main :: IO ()
main = hspec spec
spec :: Spec
spec = beforeAll (return "foo") $ do
describe "something" $ do
it "some behavior" $ \xs -> do
xs `shouldBe` "foo"
it "some other behavior" $ \xs -> do
xs `shouldBe` "foo"