我有一个在Wai之上编写的应用程序,配置为具有一些自定义状态,并且可以使用Test.Hspec.Wai.进行测试
我可以测试请求/响应交互,但我还不知道如何测试状态更改;具体地说,如果我的应用程序状态是TVar Text
,我如何在测试中获得它的值,以便验证它的值?
-- app :: TVar Text -> IO Application
-- is defined in my application library
wrapp :: Text -> IO (TVar Text, Application)
wrapp s = do
s' <- newTVarIO s
a <- app s'
return (s', a)
spec :: Spec
spec = withState (wrapp "hello") $ do
describe "x" $ it "x" $ do
st <- getState -- st is TVar Text.
s <- undefined -- WHAT DO I PUT HERE TO GET THE STATE OUT OF TVar?
get "/" `shouldRespondWith` ""hello, world!""
s `shouldBe` "hello"
*(注意,在撰写本文时,我在这里谈论的getState
方法没有在最新的LTS中导出;将hspec-wai-0.10.1添加到extra-deps
中,以获得具有此处提到的所有功能的版本
我认为问题是您忘记了将整个spec
封装到with app
中,就像在hspec-wai
的README:中所做的那样
spec :: Spec
spec = with app $ do
describe "GET /" $ do
it "responds with 200" $ do
get "/" `shouldRespondWith` 200