2016-12-01 44 views
0

我正在使用pg-promise進行一些測試,涉及刪除表並重新創建表。travis-ci postgres`SELECT EXISTS`查詢返回不同的結果

所有的測試都通過我的本地機器。但在travis-ci上,似乎滑動了所有的DROP TABLE ... SQL,導致測試失敗。

任何人有任何想法爲什麼?這是一個許可問題嗎?

有沒有辦法讓我進一步調試這個,就像連接到travis-ci postgres服務器?

更新:我沒有把任何代碼cuz所有的測試通過我的本地環境,所以我認爲這只是一個travis-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

一個通常包括這樣的代碼;) –

+0

@維塔利-T我添加了一些代碼,可能是相關的。 – xiaofan2406

+0

@ vitaly -t如果您有更多時間進行調查,則此處爲回購。 https://github.com/xiaofan2406/pglize – xiaofan2406

回答

1

很可能是因爲你的測試順序是錯誤的,這是由於競爭條件,你只能在Travis Ci上看到它,因爲它在運行測試時比你的本地機器忙得多。

首先,嘗試用DROP TABLE IF EXISTS name替換您的DROP TABLE name

然後你可以嘗試使用CREATE TABLE IF NOT EXISTS name...

+0

謝謝,你幫我找出是什麼原因引起的問題 – xiaofan2406

+0

@ xiaofan2406你想接受答案還是發表一個你自己的? –