W aplikacji Rails mam plik .js.erb, który ma zmienną, która jest dynamicznie ustawiana na podstawie kodu Ruby.Unieważnij pamięć podręczną Sprockets podczas automatycznego testu RSpec
var myTimer = <%= MyApp.config.timeout_time * 1000 %>;
Aplikacja działa poprawnie, ale mam problem z niektórymi automatycznymi testami. Problem występuje w teście właściwości RSpec, który działa z tym kodem JavaScript. Mój plik spec zawiera wiele testów, które zmieniają czas w locie, aby przetestować różne scenariusze. W moim pliku spec przejdzie pierwszy przykład, a reszta nie.
W końcu zdałem sobie sprawę, że tak się dzieje, ponieważ myTimer
nigdy nie jest aktualizowany po stronie JavaScript. Po uruchomieniu pierwszego testu JavaScript jest kompilowany przy użyciu bieżącej wartości, ponieważ jest ustawiony w Ruby. Kiedy zmieniam timer Ruby dla drugiego testu, RSpec nadal używa poprzedniej wartości w JavaScript.
Czy istnieje sposób, aby powiadomić Sprockets/Rails o unieważnieniu pliku lub części pamięci podręcznej, aby JavaScript został przebudowany? Nie chcę wyłączyć buforowania w ogóle, po prostu potrzebuję sposobu unieważnienia pliku application.js na podstawie testu w razie potrzeby.
Mogę być w stanie "dotknąć" jednego z plików JavaScript w systemie plików, aby sprawić, że koła uważają, że plik został zmieniony, ale tak naprawdę nie chcę tego robić.
Dziękuję, to świetny pomysł. Dam ci szansę. – CodeSmith
Czy masz szczęście? –
Nie jestem jeszcze pewien. Zostałem przekierowany do obsługi innych problemów i nie miałem okazji jeszcze tego wypróbować. Zaktualizuję, gdy tylko będę wiedział więcej. – CodeSmith