2017-05-20 39 views
1

通過舊版本的Neo4j的& eno4j.rb一切工作良好Rsepc - 數據庫吸塵器Neo4j.rb 8.0.13

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    DatabaseCleaner[:neo4j, connection: { type: :server_db, path: ENV['TEST_GRAPHENEDB_URL'] }].strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner[:neo4j, connection: { type: :server_db, path: ENV['TEST_GRAPHENEDB_URL'] }].strategy = :transaction 
    end 

    config.before(:each, js: true) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner[:neo4j, connection: { type: :server_db, path: ENV['TEST_GRAPHENEDB_URL'] }].strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    DatabaseCleaner[:neo4j, connection: { type: :server_db, path: ENV['TEST_GRAPHENEDB_URL'] }].start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    DatabaseCleaner[:neo4j, connection: { type: :server_db, path: ENV['TEST_GRAPHENEDB_URL'] }].clean 
    end 
end 

與Neo4j的& Neo4j.rb的新版本升級後,我已經改變了這文件

RSpec.configure do |config| 
    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    Neo4j::ActiveBase.current_session.query('MATCH (n) DETACH DELETE n') 
    end 
end 

這是我的數據庫清理文件,我使用的是Postgres &的Neo4j在項目中,我看着 http://neo4jrb.readthedocs.io/en/8.0.x/Miscellany.html#cleaning-your-database-for-testing我得到的問題,當我運行TES後做到了這一點t cases

Neo4j::PendingMigrationError: 
    Migrations are pending: 
    20170324201940 
    20170324202013 
    20170324202025 
    20170324202040 
    20170324202053 
    20170324202110 
    20170324202522 
    20170324202604 
    20170324202801 
    20170328203203 

回答

3

我建議完全擺脫DatabaseCleaner。它提供了三種不同形式的數據庫清理,但只有一個真正與Neo4j的工作,所以沒有多大意義(見this page)。

你應該可以,如果你使用的是neo4j寶石8.1.x做MATCH (n) DETACH DELETE n。以前,如果你刪除了整個數據庫的寶石會抱怨遷移需要運行,因爲SchemaMigration節點會被刪除。在8.1中,該檢查現在被忽略。 8.1前,你想要做的事,如:

MATCH (n) WHERE NOT n:`Neo4j::Migrations::SchemaMigration` DETACH DELETE n 

另外,分別在8.1,你可能想這樣做rake neo4j:migrate,而是做rake neo4j:schema:load它加載所有約束/索引,而不是通過每次遷移運行中,當你獲得更多的遷移時,它會變得越來越慢。對於neo4j:schema:load工作,不過,你需要確保的是,db/neo4j/schema.yml文件簽入存儲庫(該文件重新生成新的每次運行rake neo4j:migrate所以它的同步與您的遷移)

我也喜歡把我的DELETE聲明中before(:each)而不是after(:each),這樣我可以肯定,我的測試是在一個新的運行狀態。否則,一個破碎的測試文件,清理自己弄亂了另一個測試文件後,它的通常並不清楚發生了什麼事情發生這種情況時打開。