1

我正在尝试使用hspec涉及 postgres 事务回滚以及postgresql-simple'sbeginrollback命令来编写测试。

但是,应用postgresql-simple's beginand rollbackcommands 似乎会导致我的 'insert' 命令无法运行并且根本不会影响我的数据库。

这是相关的代码。

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 ()

我运行它ghci,在“在这里设置断点”行设置断点;应该在条目之后和回滚之前插入。在此断点处暂停时,我查询数据库以查看是否已插入条目,并看到此代码似乎没有将条目插入数据库

但是,当我删除PGS.begin connandPGS.rollback conn行时,代码确实将条目插入到数据库中。

为什么这段代码没有在 'begin' 和 'rollback' 行中插入一个条目到数据库中?

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

4

0 回答 0