旧版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
答案 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)
中,以便确保我的测试在新的状态下运行。否则,一个损坏的测试文件不会清理后会自行清理另一个测试文件,并且通常不清楚发生这种情况时会发生什么。