我一直在关注 yesod 教程,但我一直困惑于如何构建涉及 View 中参数的单元测试,该 View 也访问数据库。稍微回溯一下,我遵循了 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。它不适用于字符串、文本或数字,而且我似乎不知道如何生成字符串,因为我在各种 Data.Persist 教程中找不到任何示例代码。或者更好的是,通过其他方式调用 get
方法。
最佳答案
您想要使用Key数据构造函数来构造 ID 值,该值采用 PersistValue
作为参数。创建一个简单的示例是:
Key $ PersistInt64 5
另一种选择是使用文本 URL 调用 get
,例如get("/tag/5"::Text)
。
关于haskell - 使用 id 参数为处理程序编写 Yesod 测试用例,其中 id 是实体的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172573/