1

我有一个在Wai之上编写的应用程序,配置为具有一些自定义状态并且可以使用Test.Hspec.Wai进行测试。

我可以测试请求/响应交互,但我无法弄清楚如何测试状态变化;具体来说,如果我的应用程序状态是 a 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获得具有此处提到的所有功能的版本。

4

1 回答 1

0

我认为问题在于您忘记将整个包装specwith app,就像在hspec-wais README 中所做的那样:

spec :: Spec
spec = with app $ do
  describe "GET /" $ do
    it "responds with 200" $ do
      get "/" `shouldRespondWith` 200
于 2019-11-19T04:55:07.333 回答