haskell 在测试期间访问由`beforeAll`设置的值

pw9qyyiw  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(103)

这是我得到的:

spec :: Spec
spec = do
  manager <- runIO newManager

  it "foo" $ do
    -- code that uses manager

  it "bar" $ do
    -- code that usees manager

字符串
runIO的文档建议我可能应该使用beforeAll,因为我不需要manager来 * 构造 * spec树,我只需要它来 * 运行 * 每个测试,在我的用例中,它们最好共享同一个管理器,而不是为每个测试创建一个新的管理器。
如果您不需要IO操作的结果来构造规范树,那么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

7gs2gvoe

7gs2gvoe1#

Spec参数作为常规函数参数传递给it块(如果你想了解发生了什么,请查看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"

字符串

相关问题