尝试单元测试路由时出现问题。Scotty,Persistent和Hspec-WAI。
与Yesod或Spock不同,Scotty没有一个很好的地方来存储数据库处理程序。我通过一个大规模的"do“来启动数据库,将数据库池作为本地变量,然后使用该变量,从而使其正常工作。
app :: IO ()
app = do
-- allocate_database $ \pool
-- scotty 8080 $do
-- handleSomeRoute pool然而,Hspec-WAI希望它出现在IO申请表中。
scottyApp :: ScottyM () -> IO Application有没有一种合理的方法将DB连接池注入到scottyApp中?
发布于 2016-05-15 01:04:11
下面是你如何做到这一点。基本上,在调用hspec之前打开数据库:
{-# 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` 200https://stackoverflow.com/questions/37227090
复制相似问题