Rails fragmentieren den Cache-Test mit RSpec

8

Ich habe das Gefühl, dass dies ein nicht so viel dokumentiertes Thema ist, zumindest hatte ich eine Menge Probleme, unsere Best Practices hier zu finden.

Ich bin Fragment Caching in der Ansicht mit einem cache_key:

%Vor%

Jetzt kann ich hinzufügen: touch = & gt; true auf der Seite: gehört zu meiner has_many-Assoziationen und das wird alles tun, was ich brauche, um dieses Fragment auf dem neuesten Stand zu halten, aber für das Leben von mir fällt es mir schwer herauszufinden, wie ich das testen kann.

Einwerfen: touch = & gt; true ist einfach und bequem, aber es verbreitet die Ablauflogik um ein paar Stellen. Ich würde gerne eine RSpec-Anforderungsspezifikation haben, die durchgeht und das Verhalten auf diesem überprüft, etwas, das sich nicht sehr ändern kann, aber alle Caching-Anforderungen in eine bestimmte Datei bringen kann, die beschreibt, was eigentlich passieren soll / p>

Ich habe versucht, diese Zeilen:

%Vor%

Die Spezifikationen wurden mit den Capybara-Schritten konkretisiert, durch die natürlich die Updates gemacht wurden, und ich dachte, ich wäre ziemlich auf dem richtigen Weg. Aber die Tests flackerten auf seltsame Weise. Ich würde die Spezifikationen ändern, um die Mitarbeiter-Objekte cache_key auszugeben, und manchmal würden sich die cache_keys ändern und manchmal nicht, manchmal würden die Spezifikationen bestehen und manchmal nicht.

Ist das überhaupt ein guter Ansatz?

Ich weiß, dass SO Fragen haben möchte, die beantwortbar sind, um zu beginnen: Wie kann ich diesen Test einrichten und abbrechen, um Caching zu verwenden, wenn mein Test-Env standardmäßig nicht zwischengespeichert ist? Im Allgemeinen würde ich jedoch gerne hören, wie Sie das Fragment-Caching in Ihren Apps erfolgreich testen können, wenn Sie damit Erfolg hatten.

BEARBEITEN

Ich akzeptiere Cailinannes Antwort, da sie das Problem anspricht, nach dem ich speziell frage, aber ich habe jedoch entschieden, dass ich nicht einmal das Testen der Integrationstests empfehlen kann, wenn Sie davon wegkommen.

Anstatt die Berührung in meinen Assoziationsdeklarationen anzugeben, habe ich einen Beobachter speziell für meine Caching-Bedürfnisse erstellt, der direkt auf Modelle trifft und ihn isoliert testet.

Ich würde empfehlen, wenn Sie einen Beobachter mit mehreren Modellen isoliert testen, um auch einen Beobachter zu beobachten, um die Beobachter zu beobachten, andernfalls können Sie zu viel Realität ausspucken.

Die besondere Antwort, die mich dazu führt, ist hier: Ссылка

    
Blastula 12.12.2011, 23:33
quelle

2 Antworten

7

Lassen Sie mich zuerst sagen, dass Sie in dieser Antwort mehr Sympathie als Tat bekommen können. Ich habe mit denselben Problemen gekämpft. Während ich in der Lage war, reproduzierbare Ergebnisse für einen bestimmten Test zu erhalten, fand ich heraus, dass die Ergebnisse davon abhängig waren, ob ich eine im Vergleich zu mehreren Spezifikationen und innerhalb oder ohne Spork lief. Seufz.

Am Ende habe ich festgestellt, dass 99,9% meiner Probleme verschwunden sind, wenn ich einfach das Caching in meiner test.rb-Datei aktiviert habe. Das mag seltsam klingen, aber nach einigem Überlegen war es für meine Bewerbung "richtig". Die große Mehrheit meiner Tests ist nicht auf der Ebene "view / request", und für die wenigen, die sind, macht es keinen Sinn, unter den gleichen Konfigurationen zu testen, die der Benutzer sieht?

Während ich damit rang, schrieb ich ein Blogpost , der einige nützliche Testhelfer zum Testen des Caching enthält. Sie könnten es nützlich finden.

    
cailinanne 13.12.2011, 15:33
quelle
2

Hier ist, was ich in meinen Spezifikationen verwendet habe mit Caching in meiner config / environments / test.rb

aktiviert %Vor%     
Nicholas Lemay 07.01.2014 22:48
quelle