我正在尝试使用hspec
编写一个涉及postgres事务回滚的测试,与postgresql-simple
的begin
和rollback
命令一样。
但是,应用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”行设置断点;应该插入条目之后和回滚之前。在此断点处暂停时,我查询数据库以查看是否已插入条目,并看到没有条目似乎通过此代码插入数据库。
但是,当我删除ghci
和PGS.begin conn
行时,代码会将该条目插入数据库。
为什么此代码没有在“begin”和“rollback”行中插入数据库?
如何编写开始和回滚的hspec测试,以便我的测试不影响数据库中的值,并实际运行命令?