2016-05-14 83 views
1

嘗試單元測試路線的問題。 Scotty,Persistent和Hspec-WAI。Scotty with Persistent和Hspec-wai

與Yesod或Spock不同,Scotty沒有一個很好的存放數據庫處理程序的地方。我通過一個巨大的「做」來啓動數據庫,將數據庫池保存爲局部變量,然後使用該變量。

app :: IO() 
app = do 
    -- allocate_database $ \pool 
     -- scotty 8080 $do 
     --  handleSomeRoute pool 

但是,Hspec-WAI希望它在IO應用程序表單中。

scottyApp :: ScottyM() -> IO Application 

有沒有一種理智的方式將數據庫連接池注入scottyApp?

回答

3

以下是您可以如何操作的方法。基本上,你打電話前打開數據庫:

{-# 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