Я хочу написать небольшие интеграционные тесты для моих обработчиков Snap, но я застрял. Вот сценарий. У меня есть веб-обработчик оснастки, что (заурядный стиль) CRUDs до типа и это выглядит примерно так:Проверка привязки Web Framework Handler
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 ???
Но ждать !!! Мой обработчик запроса имеет тип AppHandler()
, но runHandler
требует обработчика типа Snap a
. Как поднять мой тип AppHandler
в монаду Snap
? Помогите, пожалуйста, это отвлекает меня.
Является ли 'AppHandler' типом, который вы определили? Я посмотрел в Интернете, но не видел его нигде. –
'type AppHandler = приложение приложения Handler App ... ... его синоним, который показан в учебнике snap на веб-сайте Snap. Тип 'Handler b v' является экземпляром' MonadSnap'. – ExternalReality
Я подумал, что это что-то в этом роде. Спасибо, что разобрался. –