如何使用hspec开始和回滚事务?

时间:2017-09-22 20:52:38

标签: haskell transactions hspec postgresql-simple

我正在尝试使用hspec编写一个涉及postgres事务回滚的测试,与postgresql-simplebeginrollback命令一样。

但是,应用postgresql-simple的{​​{1}}和begin命令似乎会导致我的'insert'命令无法运行,并且根本不会影响我的数据库。

以下是相关代码。

rollback

我在import qualified Database.PostgreSQL.Simple as PGS import Test.Hspec (describe, it, SpecWith, hspec, before, after) testConnInfo :: PGS.ConnectInfo testConnInfo = PGS.ConnectInfo { PGS.connectHost = "localhost" , PGS.connectPort = 5432 , PGS.connectUser = "user" , PGS.connectPassword = "" , PGS.connectDatabase = "database" } testConnection :: IO PGS.Connection testConnection = do PGS.connect testConnInfo runSpec :: IO () runSpec = do conn <- testConnection hspec $ test_addTask conn test_addTask :: PGS.Connection -> SpecWith () test_addTask conn = describe "test_addTask" $ do it "adding_task_succeeds" $ do PGS.begin conn addTask conn "taskName" print "set breakpoint here" PGS.rollback conn return () 中运行此操作,在“set breakpoint here”行设置断点;应该插入条目之后和回滚之前。在此断点处暂停时,我查询数据库以查看是否已插入条目,并看到没有条目似乎通过此代码插入数据库

但是,当我删除ghciPGS.begin conn行时,代码将该条目插入数据库。

为什么此代码没有在“begin”和“rollback”行中插入数据库?

如何编写开始和回滚的hspec测试,以便我的测试不影响数据库中的值,并实际运行命令?

0 个答案:

没有答案