我想为我的 Snap Web 处理程序编写一些集成测试,但我被卡住了。这是场景。我有一个 Snap Web 处理程序,它(普通风格)CRUDs 了一个类型,它看起来像这样:
create :: AppHandler ()
create = method POST $ do
lastName <- decodeUtf8 . fromJust <$> getParam "lastName"
firstName <- decodeUtf8 . fromJust <$> getParam "firstName"
createPerson $ Person firstName lastName
modifyResponse (setResponseCode 204)
该Snap.Test
模块有一些东西可以帮助建立一个请求,我用它来向我的处理程序发出请求:
createOwnerReq :: RequestBuilder IO ()
createOwnerReq = postUrlEncoded "host/person/create" $
fromList [ ("firstName", ["Greg-Shaw"])
, ("lastName", ["Snoy'Sullivan"])
]
这是问题所在,我想为此处理程序制作一个 TestUnit TestCase,所以我需要在createOwnerReq
请求上运行处理程序。该模块Snap.Test
提供:
runHandler :: MonadIO a => RequestBuilder m () -> Snap a -> m Response
所以
... do
resp <- runHandler createOwnerReq ???
可是等等!!!我的请求处理程序是 typeAppHandler ()
但runHandler
需要一个 Handler 类型Snap a
。如何将我的AppHandler
类型提升到Snap
monad?请帮忙,这有点让我失望。