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

met*_*ter 3 haskell yesod

我一直在关注yesod教程,我仍然坚持如何构建一个涉及参数的单元测试,该视图也会打到数据库.回溯一点,我按照Echo.hs示例:

    getEchoR :: Text -> Handler Html
    getEchoR theText = do
        defaultLayout $ do
            $(widgetFile "echo")
Run Code Online (Sandbox Code Playgroud)

相应的测试,注意我必须使用Data.Text.pack将参数转换为Text

    yit "Echo some text" $ do
        get $ EchoR $ pack "Hello"
        statusIs 200
Run Code Online (Sandbox Code Playgroud)

现在我的模型定义如下:

Tag
    name Text
    type Text
Run Code Online (Sandbox Code Playgroud)

使用可以呈现的处理程序显然需要TagId作为参数

    getTagR :: TagId -> Handler Html
    getTagR tagId = do
        tag <- runDB $ get404 tagId
        defaultLayout $ do
            setTitle $ toHtml $ tagName tag
            $(widgetFile "tag")
Run Code Online (Sandbox Code Playgroud)

这是测试失败的地方.

    yit "Get a tag" $ do
        -- tagId is undefined
        get $ TagR tagId
        statusIs 200
Run Code Online (Sandbox Code Playgroud)

我不知道如何定义tagId.它不适用于String或Text或Num,我似乎无法弄清楚如何生成一个,因为我在各种Data.Persist教程中找不到任何示例代码.或者更好的是,还有其他方法可以调用该get方法.

Mic*_*man 5

您希望使用Key数据构造函数来构造ID值,该值将a PersistValue作为参数.创建一个的简单示例是:

Key $ PersistInt64 5
Run Code Online (Sandbox Code Playgroud)

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