2015-05-29 2 views
3

Вот что я получил:доступа устанавливается значение вверх `beforeAll` во время испытаний

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, мне просто нужно это сделать запустите каждый тест, и в моем случае лучше, чтобы все они использовали один и тот же менеджер, а не создавали новый для каждого теста.

Если вам не нужен результат ввода-вывода для построения дерева спецификаций, 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 

ответ

4

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" 
Смежные вопросы