首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scotty with Persistent and Hspec-wai

Scotty with Persistent and Hspec-wai
EN

Stack Overflow用户
提问于 2016-05-14 21:11:57
回答 1查看 318关注 0票数 1

尝试单元测试路由时出现问题。Scotty,Persistent和Hspec-WAI。

与Yesod或Spock不同,Scotty没有一个很好的地方来存储数据库处理程序。我通过一个大规模的"do“来启动数据库,将数据库池作为本地变量,然后使用该变量,从而使其正常工作。

代码语言:javascript
复制
app :: IO ()
app = do
    -- allocate_database  $ \pool
      -- scotty 8080 $do 
      --     handleSomeRoute pool

然而,Hspec-WAI希望它出现在IO申请表中。

代码语言:javascript
复制
scottyApp :: ScottyM () -> IO Application

有没有一种合理的方法将DB连接池注入到scottyApp中?

EN

回答 1

Stack Overflow用户

发布于 2016-05-15 01:04:11

下面是你如何做到这一点。基本上,在调用hspec之前打开数据库:

代码语言:javascript
复制
{-# LANGUAGE OverloadedStrings #-}

import           Test.Hspec
import           Test.Hspec.Wai
import           Network.Wai (Application)
import qualified Web.Scotty as S

allocate_db :: (Int -> IO a) -> IO a
allocate_db = undefined

handleSomeRoute :: Int -> S.ScottyM ()
handleSomeRoute = undefined

main2 :: IO ()
main2 = allocate_db $ \pool -> do
  let app' = handleSomeRoute pool
  hspec $ with (S.scottyApp app') $ do
            describe "GET /" $ do
              it "responds with 200" $ do
                get "/" `shouldRespondWith` 200
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37227090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档