Haskell 测试快照Web框架处理程序

Haskell 测试快照Web框架处理程序,haskell,types,integration-testing,haskell-snap-framework,Haskell,Types,Integration Testing,Haskell Snap Framework,我想为我的SnapWeb处理程序编写一些集成测试,但我被卡住了。下面是一个场景。我有一个Snap web处理程序,它(普通样式)可以对一个类型进行修改,它看起来像这样: create :: AppHandler () create = method POST $ do lastName <- decodeUtf8 . fromJust <$> getParam "lastName" firstName <- decodeUtf8 .

我想为我的SnapWeb处理程序编写一些集成测试,但我被卡住了。下面是一个场景。我有一个Snap web处理程序,它(普通样式)可以对一个类型进行修改,它看起来像这样:

create :: AppHandler ()
create = method POST $ do
         lastName  <- decodeUtf8 . fromJust <$> getParam "lastName"
         firstName <- decodeUtf8 . fromJust <$> getParam "firstName"
         createPerson $ Person firstName lastName
         modifyResponse (setResponseCode 204)
问题是,我想为这个处理程序创建一个TestUnit测试用例,所以我需要在
createOwnerReq
请求上运行这个处理程序。模块
Snap.Test
提供:

 runHandler :: MonadIO a => RequestBuilder m () -> Snap a -> m Response
所以

。。。做

respIbolla的
return-create
技巧可能不会达到您想要的效果。它可以正确编译,因为runHandler接受一个
Snap a
,它将处理具有任何返回值的Snap操作<代码>返回create::Snap(AppHandler())
,这与您可能期望的
Snap()
非常不同

我们正在开发一个Snap.Snaplet.Test等效程序,它将封装Snap.Test提供的runHandler函数,以允许您测试处理程序。这可能会包含在snap软件包的0.10版本中

在此期间,您可以通过使用将
SnapletInit
转换为可传递给Snap.Test.runHandler的
Snap()
操作来手动解决此问题。这不允许您测试单个
处理程序
,但允许您测试应用程序初始值设定项中定义的任何路由


编辑:在snap-0.10中,我们添加了。

AppHandler是您定义的类型吗?我在网上四处查看过,但在其他任何地方都没有看到它。
键入AppHandler=Handler App App
…它是snap网站上的snap教程中显示的同义词。Type
handlerv
MonadSnap
的一个实例。我以为是这样的。谢谢你清理它。你试过只使用
return create
:类型系统可能会为你处理它。。。无论如何,你能发布一个完整的脚本,这样我们就可以在本地运行并调试它了吗?Ibolla,
return create
。然而,我不确定我是否理解其中的原因<代码>返回的类型为
a->ma
。我不知所措。我该去哪里复习变压器的东西呢。我已经有几次一步一步地看完了《蒙纳德变形金刚》。最好再来一次。
 runHandler :: MonadIO a => RequestBuilder m () -> Snap a -> m Response
 ... do 
     resp <- runHandler createOwnerReq ???