2017-05-20 1 views
1

Avec la version ancienne de Neo4j & tout eno4j.rb travaillait bonneRsepc - propre base de données avec 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 

Après la mise à niveau avec une nouvelle version de Neo4j & Neo4j.rb J'ai changé cette fichier

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 

Ceci est ma base de données fichier propre, j'utilise postgres & Neo4j dans mon projet, je l'ai fait après avoir regardé http://neo4jrb.readthedocs.io/en/8.0.x/Miscellany.html#cleaning-your-database-for-testing Je reçois problème lorsque je lance tes t cas

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

Répondre

3

Je suggère simplement de se débarrasser de DatabaseCleaner entièrement. Il offre trois différentes formes de nettoyage de base de données, mais une seule fonctionne vraiment avec Neo4j donc il n'y a pas beaucoup de points (voir this page).

Vous devriez être en mesure de faire MATCH (n) DETACH DELETE n si vous utilisez 8.1.x de la gemme neo4j. Auparavant, si vous supprimiez toute la base de données, la gem se plaignait que les migrations devaient être exécutées car les noeuds SchemaMigration auraient été supprimés. En 8.1, cette vérification est maintenant ignorée. Avant 8.1 vous voulez faire quelque chose comme:

MATCH (n) WHERE NOT n:`Neo4j::Migrations::SchemaMigration` DETACH DELETE n 

En outre, séparément, en 8.1, vous voudrez peut-être de ne pas faire rake neo4j:migrate et au lieu faire rake neo4j:schema:load qui charge toutes les contraintes/index au lieu de courir à travers chaque migration, ce qui peut devenir de plus en plus lent à mesure que vous obtenez plus de migrations. Pour neo4j:schema:load au travail, cependant, vous devez vous assurer que le fichier db/neo4j/schema.yml est cochée dans votre dépôt (ce fichier est à nouveau généré frais chaque fois que vous exécutez rake neo4j:migrate afin qu'il soit en phase avec vos migrations)

Je préfère aussi mettre mon DELETE déclaration dans un plutôt qu'un after(:each) de sorte que je peux être sûr que mes tests fonctionnent dans un état frais. Sinon, un fichier de test brisé qui ne corrige pas après lui-même endommage un autre fichier de test et il n'est généralement pas clair ce qui se passe lorsque cela se produit.