Как начать и откатить транзакцию с помощью hspec?
Я пытаюсь написать тест, используя hspec
включая откат транзакции postgres как postgresql-simple
"s begin
а также rollback
команды.
Тем не менее, применяя postgresql-simple
"s begin
а также rollback
По-видимому, мои команды "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 conn
а также PGS.rollback conn
Строки, однако, код вставляет запись в базу данных.
Почему этот код не вставляет запись в базу данных со строками 'begin' и 'rollback'?
Как я могу написать тесты hspec, которые начинаются и откатываются так, чтобы мои тесты не влияли на значения в базе данных и которые фактически выполняли команды?