2017-05-20 58 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),这样我可以肯定,我的测试是在一个新的运行状态。否则,一个破碎的测试文件,清理自己弄乱了另一个测试文件后,它的通常并不清楚发生了什么事情发生这种情况时打开。