我一直在关注yesod教程,但我仍然坚持如何构建一个涉及参数的单元测试,该视图也会触及数据库。回溯一点,我按照Echo.hs示例:
getEchoR :: Text -> Handler Html
getEchoR theText = do
defaultLayout $ do
$(widgetFile "echo")
相应的测试,请注意我必须使用Data.Text.pack
将参数转换为Text yit "Echo some text" $ do
get $ EchoR $ pack "Hello"
statusIs 200
现在我的模型定义如下:
Tag
name Text
type Text
使用可以呈现的处理程序显然将TagId作为参数
getTagR :: TagId -> Handler Html
getTagR tagId = do
tag <- runDB $ get404 tagId
defaultLayout $ do
setTitle $ toHtml $ tagName tag
$(widgetFile "tag")
这是测试失败的地方。
yit "Get a tag" $ do
-- tagId is undefined
get $ TagR tagId
statusIs 200
我不确定如何定义tagId。它不适用于String或Text或Num,我似乎无法弄清楚如何生成一个,因为我在各种Data.Persist教程中找不到任何示例代码。或者更好的是,调用get
方法的其他方法。
答案 0 :(得分:5)
您希望使用Key数据构造函数来构造ID值,该值将PersistValue
作为参数。创建一个的简单示例是:
Key $ PersistInt64 5
另一种选择是使用文字网址拨打get
,例如get ("/tag/5" :: Text)
。
答案 1 :(得分:0)