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