2017-05-20 2 views
1

mit alter Version von Neo4j & eno4j.rb alles funktioniertRsepc - Datenbank Reiniger mit 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 

nach Aktualisierung mit einer neuen Version von Neo4j & Neo4j.rb gut war ich habe dies geändert Datei

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 

Dies ist meine Datenbank cleaner Datei, ich bin mit postgres & Neo4j in meinem Projekt habe ich dies getan haben, nachdem bei http://neo4jrb.readthedocs.io/en/8.0.x/Miscellany.html#cleaning-your-database-for-testing ich auf der Suche Problem bin immer wenn ich tes laufen t Fälle

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

Antwort

3

Ich würde vorschlagen, nur DatabaseCleaner vollständig loszuwerden. Es bietet drei verschiedene Formen der Datenbankreinigung, aber nur eine funktioniert wirklich mit Neo4j, so gibt es nicht viel Sinn (siehe this page).

Sie sollten MATCH (n) DETACH DELETE n tun können, wenn Sie 8.1.x des neo4j Gem. Verwenden. Wenn Sie zuvor die gesamte Datenbank gelöscht haben, würde sich das Juwel beschweren, dass Migrationen ausgeführt werden müssen, da die Knoten SchemaMigration gelöscht worden wären. In 8.1 wird diese Überprüfung jetzt ignoriert. Vor 8.1 würden Sie wollen so etwas wie zu tun:

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

Auch separat, in 8.1 können Sie nicht wollen rake neo4j:migrate tun und stattdessen rake neo4j:schema:load zu tun, die alle Bedingungen/Indizes lädt stattdessen durch jede Migration ausgeführt wird, Das kann mit zunehmender Migration langsamer und langsamer werden. obwohl für neo4j:schema:load, zu arbeiten, müssen Sie sicherstellen, dass die db/neo4j/schema.yml-Datei in das Repository überprüft (diese Datei wird neu generiert frisch jedes Mal, wenn Sie laufen rake neo4j:migrate, so dass es in Synchronisierung mit Ihrem Migrationen ist)

Ich habe auch lieber Setzen Sie meine DELETE Anweisung in eine before(:each) anstatt eine after(:each), so dass ich sicher sein kann, dass meine Tests in einem frischen Zustand ausgeführt werden. Sonst zerbricht eine defekte Testdatei, die nicht bereinigt nach sich selbst eine andere Testdatei und es ist in der Regel nicht klar, was passiert, wenn das passiert.

Verwandte Themen