首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hspec测试酸状态

使用hspec测试酸状态
EN

Stack Overflow用户
提问于 2017-02-23 04:23:03
回答 1查看 113关注 0票数 1

我是一个haskell新手,在用acid状态测试函数时遇到了问题,这就是我的数据结构

代码语言:javascript
复制
data UserState = UserState { name :: String }
    deriving (Eq, Ord, Read, Show, Data, Typeable)

这是我想要测试的函数:

代码语言:javascript
复制
setName :: String -> Update UserState String                  
setName n =      
    do c@UserState{..} <- get 
       let newName = n 
       put $ c { name = newName } 
       return newName
$(makeAcidic ''UserState ['setName ])

这是我的测试:

代码语言:javascript
复制
spec :: Spec
spec = do
  describe "test" $
    it "test" $ do
            setName "Mike" `shouldBe` UserState{ name = "Mike"}

我不知道如何对我的期望值进行建模。UserState{ name = "Mike"}不工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 07:30:24

我认为如果不查询数据库状态,您就无法访问它。因此,您需要添加一个查询来询问您的数据库状态,例如:

代码语言:javascript
复制
getUserState :: Query UserState UserState
getUserState = ask

然后,可以像这样编写一个测试:

代码语言:javascript
复制
withDatabaseConnection :: (AcidState UserState -> IO ()) -> IO ()
withDatabaseConnection = 
    bracket (openLocalState UserState{name = "initial name"}) 
            closeAcidState

spec :: Spec
spec = do
    around withDatabaseConnection $ do
        describe "test" $
            it "test" $ \c -> do
                _ <- update c (SetName "Mike") 
                userState <- query c GetUserState
                userState `shouldBe` UserState{ name = "Mike"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42401526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档