我正在进行一些测试,pg-promise
涉及删除一个表并重新创建一个表。
所有测试都在我的本地计算机上传递。但是在travis-ci
上,它似乎跳过了所有DROP TABLE ...
SQL,导致测试失败。
任何人都知道为什么?这是许可问题吗?
有没有办法让我进一步调试,比如连接到travis-ci
postgres服务器?
更新:我没有放任何代码,因为所有测试都传递给我的本地环境,所以我认为这只是一个travis-ci
问题。以下是我认为traivs-ci
正在跳过的位。
afterEach('cleanup tables', (done) => {
db.none('DROP TABLE $1~', 'syncTest')
.then(done)
.catch(() => done());
});
beforeEach('cleanup tables', (done) => {
db.none('DROP TABLE $1~', 'syncTest')
.then(done)
.catch(() => done());
});
Update2:经过一些进一步的测试,结果证明测试失败是因为
db.one('SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name=$1)', [tableName])
未返回预期值。查询在travis上返回{ '?column?': false }
,但在我的本地环境中返回{ exists: false }
。
这是travis-ci
问题吗?或postgres版本问题?
答案 0 :(得分:1)
很可能是因为你的测试序列是错误的,这是一个竞争条件,你只能在Travis Ci上看到它,因为它在运行测试时比你的本地机器更繁忙。
首先,尝试将DROP TABLE name
替换为DROP TABLE IF EXISTS name
。
然后您可以尝试使用CREATE TABLE IF NOT EXISTS name...