2017-05-24 3 views
0

Ich versuche, eine Rails Fixture zum Testen eines Controllers erstellen, die Versionen mit dem paper_trail Edelstein (7.0.1) erhalten bleibt. Aber ich war bisher nicht in der Lage, irgendwelche Versionen innerhalb der Geräte zu testen. Und es scheint, dass die YAML-Datei andere Tests nicht lädt/bricht. Hier ist der Inhalt meiner `versions.yml`` Datei:Rails YAML Fixture Fehler mit PaperTrail Gem

--- 
version_001: 
    id: 1 
    item_type: 'DistributionChannel' 
    item_id: 1 
    event: 'create' 
    whodunnit: <%= User.find_by(email: '[email protected]').id.to_s %> 
    object: nil 
    created_at: 2017-05-15 12:00:00.000000000 Z 
    object_changes: '---\\nid:\\n- \\n- 1\\nprimary_channel:\\n- \\n- Best Buy\\nsecondary_channel:\\n- \\n- ''\ncreated_at:\\n- \\n- 2017-05-15 12:00:00.000000000 Z\\nupdated_at:\\n- \\n- 2017-05-15 12:00:00.000000000 Z\\n' 

Das Schema enthält die Versionen Tabelle mit den entsprechenden Spalten btw.

+0

Ausgehen hier, object_changes muss in Anführungszeichen sein? –

+0

Welche Art von Fehlermeldungen erhalten Sie? Wird der Wert für "object_changes" wirklich zweimal ** ausgewertet, um doppelte Backslashes aus dem geladenen YAML zu erhalten (für die sie ** not ** Escape-Sequenzen sind, d. H. "\\ n" wird als 3 Zeichen geladen). Was ist deine genaue Frage? Gibt es eine Alternative für paper_trail? Wie konvertiert man die YAML zu JSON?Wenn Sie den Test mit XML schreiben können? – Anthon

+0

Ich erhalte tatsächlich keinen Fehler beim Laden von Fixtures mit db: fixtures: load, aber es werden keine Versionen geladen, wenn man in die Tests eindringt. Ich würde auf jeden Fall gerne weiter mit paper_trail arbeiten. Und es war mein Verständnis, dass ich den neuen Zeilenzeichen entkommen musste, daher das zusätzliche "\". Ich bin sehr neu in Armaturen, da ich Fabriken bevorzuge. Kurz gesagt, ich suche, ob es irgendwelche offensichtlichen Syntaxfehler oder andere Schluckaufe gibt, von denen diejenigen, die Erfahrung mit paper_trail haben, wissen könnten, dass das Laden der Fixtures verhindert würde. Vielen Dank! – lgants

Antwort

0

Ich habe schließlich das Gerät, indem Sie die folgenden test_helper.rb zu laden:

self.set_fixture_class versions: PaperTrail::Version

Und das mit folgenden yaml Syntax: bis

version_001: 
    id: 1 
    item_type: 'DistributionChannel' 
    item_id: 1 
    event: 'create' 
    whodunnit: <%= ActiveRecord::FixtureSet.identify('user_example').to_s %> 
    object: nil 
    created_at: 2017-05-15 12:00:00 
    object_changes: "---\nid:\n- \n- 1\nprimary_channel:\n- \n- Best Buy\nsecondary_channel:\n- \n- ''\ncreated_at:\n- \n- 2017-05-15 12:00:00.000000000 Z\nupdated_at:\n- \n- 2017-05-15 12:00:00.000000000 Z\n" 

Der Zusatz test_helper.rb ist notwendig, weil die Versionstabelle innerhalb von PaperTrail einen Namespace hat. Ich habe einige widersprüchliche Informationen über die passende Yaml-Syntax gesehen, daher zögere ich, meine Theorien zu erklären, warum diese Yaml-Syntax funktioniert hat (alle Erklärungen in Kommentaren wären sehr willkommen). Aber hoffentlich hilft dies, jemanden beim Testen von paper_trail mit Minitest und der Verwendung von Fixtures in die richtige Richtung zu lenken.

1

Ich konfrontiert mit dem ähnlichen Problem. Wenn ich nicht versions Fixture verwendet (es gab keine Version Fixture YAML-Datei), verursacht dies, dass versions Tabelle wurde nicht auf rake db:fixtures:load gelöscht, so dass dies ziemlich verwirrt mich auf Entwicklungsumgebung Debugging.

Um dieses Problem zu vermeiden, stellte ich versions Halterung wie folgt:

  1. Datei/Einrichtung/paper_trail/versions.yml zu testen Locate Halterung, so dass sie automatisch von Rake Aufgabe geladen wird.
  2. Schreiben object_changes Daten von Hand ist ziemlich mühsam Aufgabe, so dass wir to_yaml Methode verwenden, um es wie folgt zu generieren. Erstellen und/oder eine AR-Aktualisierung erzeugt Satzversion, so dass im Anschluss an Befehlszeilen yaml-Datei tmp erzeugt/versions.yml:

    $ rails console 
    irb> File.write('tmp/versions.yml', PaperTrail::Version.all.map{|v| v.attributes}.to_yaml) 
    
  3. bearbeiten tmp/versions.yml wie folgt und speichern Sie es testen/Einrichtung /paper_trail/versions.yml:

    version_001: 
        item_type: DistributionChannel 
        item:  distribution_001 
        event:  create 
        whodunnit: ... 
        created_at: 2017-12-27 02:25:33.000000000 Z 
        object_changes: "... (keep as above to_yaml generated)..." 
    
  4. Nun führen rake db:fixtures:load! Es sollte Version Fixture auf PaperTrail :: Version AR laden und distribution_001 record .versions Methode sollte es enthalten.

HINWEIS-1: item oben ist Label Reference

HINWEIS-2: whodunnit sollten gleich sein. Siehe Fixture label interpolation