Snap Webハンドラーの統合テストを少し書きたいのですが、行き詰まります。これがシナリオです。私は、(ありふれたスタイルの)型をCRUDする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)
モジュールにはリクエストの作成に役立つものがいくつかあり、Snap.Test
それを使用してハンドラーのリクエストを作成します。
createOwnerReq :: RequestBuilder IO ()
createOwnerReq = postUrlEncoded "host/person/create" $
fromList [ ("firstName", ["Greg-Shaw"])
, ("lastName", ["Snoy'Sullivan"])
]
ここに問題があります。このハンドラーのTestUnitTestCaseを作成したいので、createOwnerReq
リクエストでハンドラーを実行する必要があります。モジュールSnap.Test
は以下を提供します:
runHandler :: MonadIO a => RequestBuilder m () -> Snap a -> m Response
それで
... do
resp <- runHandler createOwnerReq ???
ちょっと待って!!!私のリクエストハンドラーはタイプですが、タイプのハンドラーAppHandler ()
がrunHandler
必要Snap a
です。AppHandler
タイプをSnap
モナドに持ち上げるにはどうすればよいですか?助けてください、これは一種のトリッピンです。