Helpers to test WAI applications with Hspec
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Main (main) where
import Test.Hspec
import Test.Hspec.Wai
import Test.Hspec.Wai.JSON
import Network.Wai (Application)
import qualified Web.Scotty as S
import Data.Aeson (Value(..), object, (.=))
main :: IO ()
main = hspec spec
app :: IO Application
app = S.scottyApp $ do
S.get "/" $ do
S.text "hello"
S.setHeader "Content-Type" "text/plain"
S.get "/some-json" $ do
S.json $ object ["foo" .= Number 23, "bar" .= Number 42]
S.setHeader "Content-Type" "application/json"
spec :: Spec
spec = with app $ do
describe "GET /" $ do
it "responds with 200" $ do
get "/" `shouldRespondWith` 200
it "responds with 'hello'" $ do
get "/" `shouldRespondWith` "hello"
it "responds with 200 / 'hello'" $ do
get "/" `shouldRespondWith` "hello" {matchStatus = 200}
it "has Content-Type: text/plain" $ do
get "/" `shouldRespondWith` 200 {matchHeaders = [("Content-Type", "text/plain")]}
describe "GET /some-json" $ do
it "responds with some JSON" $ do
get "/some-json" `shouldRespondWith` [json|{foo: 23, bar: 42}|]
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request