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モナドに持ち上げるにはどうすればよいですか?助けてください、これは一種のトリッピンです。