Rspec - Neo4j.rb 8.0.13 的数据库清理器
Rsepc - Database cleaner with Neo4j.rb 8.0.13
使用旧版本的 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
我建议完全摆脱 DatabaseCleaner
。它提供了三种不同形式的数据库清理,但只有一种真正适用于 Neo4j,因此没有太大意义(参见 this page)。
如果您使用 neo4j
gem 的 8.1.x,您应该可以做到 MATCH (n) DETACH DELETE n
。以前,如果您删除整个数据库,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
加载所有的约束/索引而不是 运行ning 通过每次迁移,随着您进行更多迁移,它会变得越来越慢。但是,要使 neo4j:schema:load
正常工作,您需要确保 db/neo4j/schema.yml
文件已签入您的存储库(每次您 运行 rake neo4j:migrate
时都会重新生成该文件)以便它与您的迁移同步)
我也更喜欢将我的 DELETE
语句放在 before(:each)
而不是 after(:each)
中,这样我可以确定我的测试是 运行状态。否则,一个 不会 清理的损坏测试文件本身会弄乱另一个测试文件,并且通常不清楚发生这种情况时发生了什么。
使用旧版本的 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
我建议完全摆脱 DatabaseCleaner
。它提供了三种不同形式的数据库清理,但只有一种真正适用于 Neo4j,因此没有太大意义(参见 this page)。
如果您使用 neo4j
gem 的 8.1.x,您应该可以做到 MATCH (n) DETACH DELETE n
。以前,如果您删除整个数据库,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
加载所有的约束/索引而不是 运行ning 通过每次迁移,随着您进行更多迁移,它会变得越来越慢。但是,要使 neo4j:schema:load
正常工作,您需要确保 db/neo4j/schema.yml
文件已签入您的存储库(每次您 运行 rake neo4j:migrate
时都会重新生成该文件)以便它与您的迁移同步)
我也更喜欢将我的 DELETE
语句放在 before(:each)
而不是 after(:each)
中,这样我可以确定我的测试是 运行状态。否则,一个 不会 清理的损坏测试文件本身会弄乱另一个测试文件,并且通常不清楚发生这种情况时发生了什么。