2016-08-09 26 views
5

In meiner Rails-Anwendung habe ich eine .js.erb-Datei, die eine Variable hat, die dynamisch basierend auf einigen Ruby-Code festgelegt wird.Invalidate Sprockets Cache während RSpec automatisierten Test

var myTimer = <%= MyApp.config.timeout_time * 1000 %>; 

Die App funktioniert gut, aber ich habe ein Problem in einigen automatisierten Tests. Das Problem tritt in einem RSpec-Feature-Test auf, der mit diesem JavaScript funktioniert. Meine Spec-Datei hat eine Reihe von Tests, die den Ruby-Wert MyApp.config.timeout_time im laufenden Betrieb ändern, um verschiedene Szenarien zu testen. In meiner Spezifikationsdatei wird das erste Beispiel bestanden und der Rest schlägt fehl.

Ich erkannte endlich, dass dies passiert, weil myTimer nie auf der JavaScript-Seite aktualisiert wird. Wenn der erste Test ausgeführt wird, wird das JavaScript mit dem aktuellen Wert kompiliert, wie er in Ruby festgelegt wurde. Wenn ich den Ruby-Timer für den zweiten Test ändere, verwendet RSpec immer noch den vorherigen Wert im JavaScript.

Gibt es eine Möglichkeit, Sprockets/Rails zu veranlassen, eine Datei oder einen Teil des Caches für ungültig zu erklären, damit das JavaScript wiederhergestellt wird? Ich möchte das Caching im Allgemeinen nicht deaktivieren, ich brauche nur eine Möglichkeit, application.js bei Bedarf pro Test zu entwerten.

Ich kann möglicherweise eine der JavaScript-Dateien im Dateisystem "berühren", damit die Ritzel die Datei ändern, aber ich möchte das nicht wirklich machen.

Antwort

1

Ich weiß nicht, was ich tun soll. Sie können jedoch in Betracht ziehen, myTimer auf den gewünschten Wert in den Feature-Spezifikationen zu setzen, die einen bestimmten Wert benötigen.

Sie verwenden Capybara Angenommen, können Sie Javascript in einer Feature-spec mit

page.execute_script('// some Javascript') 

laufen Sie benötigen Sie Javascript ein wenig neu zu ordnen ersten myTimer irgendwo zu setzen, wo ein Skript, um es zu ändern.

+0

Vielen Dank, das ist eine großartige Idee. Ich versuche es mal. – CodeSmith

+0

Hattest du Glück? –

+0

Ich bin mir noch nicht sicher. Ich wurde umgeleitet, um einige andere Probleme zu unterstützen und hatte noch keine Gelegenheit, dies auszuprobieren. Ich werde aktualisieren, sobald ich mehr weiß. – CodeSmith