0

我正在做一些测试,pg-promise涉及删除一个表并重新创建一个表。

所有测试都在我的本地机器上通过。但是travis-ci,它似乎跳过了所有DROP TABLE ...SQL,导致测试失败。

有人知道为什么吗?是权限问题吗?

有没有办法让我进一步调试这个,比如连接到travis-cipostgres 服务器?

更新:我没有放任何代码,因为所有测试都通过了我的本地环境,所以我认为这只是一个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])

没有返回预期值。查询{ '?column?': false }在 travis 上返回,但{ exists: false }在我的本地环境中返回。

这是一个travis-ci问题吗?还是postgres版本问题?

4

1 回答 1

1

很可能是因为您的测试序列是错误的,它受到竞争条件的影响,您只能在 Travis Ci 上看到,因为它在运行测试时比本地机器忙得多。

首先,尝试将您的替换DROP TABLE nameDROP TABLE IF EXISTS name.

然后你可以尝试使用CREATE TABLE IF NOT EXISTS name...

于 2016-12-02T11:57:44.580 回答