Тестирование приложения happstack с помощью hspec - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь выяснить, как протестировать приложение happstack.Я реализовал простую функцию для создания ответа для моего сервера

entryPage :: Int -> ServerPartT IO Response
entryPage i = ok $ toResponse ("return " ++ show 1)

run :: IO ()
run = simpleHTTP nullConf (entryPage i)

, теперь я хочу протестировать функцию entryPage.Например, что ответ действительно return x.Я создал функцию hspec, чтобы протестировать ее:

spec :: Spec
spec = describe "TestPage" $
    it "entryPage" $  do
        response <- entryPage 1
        let responseBody = rsBody response
        "return 1" `shouldBe` show responseBody

Но компилятор отклонил ее с ошибкой:

Couldn't match type ‘IO’ with ‘ServerPartT IO’
      Expected type: ServerPartT IO ()
        Actual type: Expectation
    • In a stmt of a 'do' block:
        "return 1" `shouldBe` show responseBody
      In the second argument of ‘($)’, namely
        ‘do response <- entryPage 1
            let responseBody = rsBody response
            "return 1" `shouldBe` show responseBody’
      In the second argument of ‘($)’, namely
        ‘it "entryPage"
           $ do response <- entryPage 1
                let responseBody = rsBody response
                "return 1" `shouldBe` show responseBody’

Я не могу получить больше здесь.

С do response <- entryPage 1 Я открываю монаду ServerPartT и не знаю, как ее покинуть.Или это неправильный подход?Я знаю, что нет универсального способа избежать монады, но есть ли решение моей проблемы?

...