2

我正在使用 bash 脚本(特别是bats)来测试我编写的一些代码。

因为我想避免干扰测试,所以我正在使用设置和拆卸功能(bats 提供),如下所示:

setup() {
  sqlite3 test.db "SAVEPOINT pre_test"
}

teardown() {
  sqlite3 test.db "ROLLBACK TO SAVEPOINT pre_test"
}

不幸的是,回滚时,我得到:

Error: no such savepoint: pre_test

但是,如果我在 SQLite 中启动一个交互式会话,我可以按照我的预期使用保存点。我想这意味着命令行程序退出后所有保存点都被遗忘了。

有没有办法解决这个问题?

4

1 回答 1

2

鉴于文档将保存点称为类似于事务,我的印象是保存点不会持续超过单个 sqlite 会话。

文档没有特别注意这一点,但是对如何处理事务的详尽解释意味着在整个过程中这都应该包含在单个会话中。

鉴于可以轻松复制非活动数据库,cp precious.db pre_test.db这似乎是影响设置的明显方式。拆解只是rm pretest.db

于 2013-05-11T20:09:18.273 回答