Rsepc - 使用Neo4j.rb 8.0.13的数据库清理程序

时间:2017-05-20 12:02:56

标签: ruby-on-rails neo4j.rb database-cleaner

旧版neo4j& eno4j.rb一切都运作良好

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我在运行测试用例时遇到问题

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

1 个答案:

答案 0 :(得分:3)

我建议完全摆脱DatabaseCleaner。它提供了三种不同形式的数据库清理,但只有一种真正适用于Neo4j,所以没有多大意义(见this page)。

如果您使用MATCH (n) DETACH DELETE n gem的8.1.x,则应该能够neo4j。以前,如果删除整个数据库,gem会抱怨需要运行迁移,因为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)中,以便确保我的测试在新的状态下运行。否则,一个损坏的测试文件不会清理后会自行清理另一个测试文件,并且通常不清楚发生这种情况时会发生什么。