Haskell 使用id参数为处理程序编写测试用例,其中id是实体的键

Haskell 使用id参数为处理程序编写测试用例,其中id是实体的键,haskell,yesod,Haskell,Yesod,我一直在学习yesod教程,我被困在如何在一个视图中构建一个包含参数的单元测试上,这个视图也会访问数据库。回溯一下,我遵循了Echo.hs示例: getEchoR :: Text -> Handler Html getEchoR theText = do defaultLayout $ do $(widgetFile "echo") 相应的测试,注意我必须使用Data.Text.pack将参数转换为文本 yit "Echo

我一直在学习yesod教程,我被困在如何在一个视图中构建一个包含参数的单元测试上,这个视图也会访问数据库。回溯一下,我遵循了Echo.hs示例:

    getEchoR :: Text -> Handler Html
    getEchoR theText = do
        defaultLayout $ do
            $(widgetFile "echo")
相应的测试,注意我必须使用Data.Text.pack将参数转换为文本

    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")
我不知道如何定义tagId。它不适用于字符串、文本或Num,而且我似乎不知道如何生成一个,因为我在各种数据中找不到任何示例代码。持久化教程。或者更好的是,使用其他方法调用
get
方法。

您希望使用数据构造函数构造一个ID值,该ID值将
持久值作为参数。创建一个简单的示例是:

Key $ PersistInt64 5

另一种选择是使用文本URL调用
get
,例如
get(/tag/5)::Text)

由于时代已经改变,我将在这里留下这张便条,说明现在人们会使用类似于:

fromBackendKey 5
有关详细信息,请参阅文档

fromBackendKey 5