Rsepc - Очиститель базы данных с 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

person Vishal G    schedule 20.05.2017    source источник


Ответы (1)


Я бы предложил просто полностью избавиться от DatabaseCleaner. Он предлагает три различных формы очистки базы данных, но только одна из них действительно работает с Neo4j, поэтому в этом нет особого смысла (см. этой страницы).

Вы должны быть в состоянии сделать MATCH (n) DETACH DELETE n, если вы используете 8.1.x драгоценного камня neo4j. Ранее, если вы удалили всю базу данных, гем жаловался, что необходимо выполнить миграцию, поскольку узлы 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), чтобы быть уверенным, что мои тесты выполняются в новом состоянии. В противном случае один испорченный тестовый файл, который не очищает себя после себя, испортит другой тестовый файл, и, как правило, неясно, что происходит, когда это происходит.

person Brian Underwood    schedule 21.05.2017