2016-08-09 14 views
5

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ć.

Odpowiedz

1

Nie wiem, jak to zrobić, o co prosiłeś. Ale można rozważyć ustawienie wartości myTimer w specyfikacjach cech, które wymagają, aby była to określona wartość.

Zakładając, że używasz Kapibara, można uruchomić funkcję Javascript w specyfikacji z

page.execute_script('// some Javascript') 

może musisz zmienić JavaScript trochę najpierw umieścić myTimer gdzieś, gdzie skrypt może go zmienić.

+0

Dziękuję, to świetny pomysł. Dam ci szansę. – CodeSmith

+0

Czy masz szczęście? –

+0

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

Powiązane problemy