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

时间:2014-03-04 12:56:09

标签: haskell yesod

我一直在关注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方法的其他方法。

2 个答案:

答案 0 :(得分:5)

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

Key $ PersistInt64 5

另一种选择是使用文字网址拨打get,例如get ("/tag/5" :: Text)

答案 1 :(得分:0)

由于时代变了,我在这里留下这句话是为了说这些天人们会使用类似的东西:

layout

请参阅fromBackendKey的文档。