Immer, wenn ich rspec Tests für meine Rails-Anwendung ausführen, dauert es ewig und ein Tag Overhead, bevor es tatsächlich Tests startet. Warum ist rspec so langsam? Gibt es eine Möglichkeit, die anfängliche Belastung von Rails zu beschleunigen oder den Teil meiner Rails-App herauszufiltern, den ich brauche (z. B. nur ActiveRecord-Zeug), damit nicht wirklich alles geladen wird, um ein paar Tests durchzuführen?Warum ist RSpec unter Rails so langsam?
Antwort
sollten Sie in der Lage sein, Ihre script/spec
Anrufe zu beschleunigen, indem script/spec_server
in einem separaten Terminal-Fenster läuft, dann die zusätzlichen -X
Parameter auf Ihre spec Anrufe hinzufügen.
Laufen Sie das über Rails? Wenn dies der Fall ist, ist es nicht die Initialisierung von RSpec, sondern Rails '. Rails muss die gesamte Codebasis und Ihre vor dem Ausführen der Spezifikationen initialisieren. Nun, es hat nicht zu, aber es tut. RSpec läuft ziemlich schnell für mich unter meinen kleinen Non-Rails-Projekten.
Dank für diese Antwort. Ich habe die Frage geklärt, dass sie spezifisch für Rails ist. –
Dann ja, seine Schienen, nicht rspec, die Sie sicher verlangsamen. –
Lauftests können sehr langsam sein, weil die gesamte Rails-Umgebung geladen werden muss (versuche Skript/Konsole) und erst dann können alle Tests ausgeführt werden. Sie sollten autotest verwenden, die die Umgebung geladen hält und prüfen, welche Dateien Sie bearbeiten. Wenn Sie eine Datei bearbeiten und speichern, werden nur die davon abhängigen Tests automatisch und schnell ausgeführt.
Wenn Sie einen Mac verwenden, empfehle ich Rspactor über Autotest, da es viel weniger Ressourcen für die Abfrage geänderter Dateien als Autotest verwendet. Es ist sowohl eine vollständige Cocoa-Version
oder der Edelstein-Version, die ich bei Github
sudo gem install pelle-rspactor
pflegen Während diese einzelnen rspec Tests nicht beschleunigen, fühlen sie sich viel schneller als sie Auto Führen Sie die betroffenen Spezifikationen innerhalb einer Sekunde von Ihnen aus und speichern Sie sie.
coole Idee, aber Link muss aktualisiert werden und es scheint nicht mit der neuesten rspec funktionieren. –
Ich empfehle die Verwendung von mislavs Version jetzt. sudo gem installieren mislav-rspactor – Pelle
Wenn Sie in einer Windows-Umgebung sind, dann gibt es wahrscheinlich wenig, was Sie tun können, da Rails unter Windows langsam zu starten scheint. Ich hatte die gleiche Erfahrung unter Windows und musste mein Setup auf eine Linux-VM verschieben, um es wirklich zippy zu machen (ich benutzte auch Autotest).
+1. Ich betreibe Rails und RSpec unter Linux und habe keine Langsamkeitsbeschwerden, wenn auch auf einem ziemlich leistungsfähigen Rechner. Mein Kollege verwendet Windows auf identischer Hardware und es kann eine ganze Minute dauern, bis die Rails-Umgebung geladen ist. –
Warum ist rspec so langsam? weil es die ganze Umgebung belädt, Lasten und alles, was Jazz kostet.
Gibt es eine Möglichkeit, die anfängliche Belastung von Rails zu beschleunigen Sie könnten versuchen, Mocks zu verwenden, statt sich auf die Datenbank zu verlassen. Dies ist tatsächlich korrekt für Komponententests und wird Ihre Unit Tests definitiv beschleunigen. Additionnaly mit dem spec Server wie von @Scott Matthewman erwähnt kann, das gleiche mit dem Autotest von ZenTest von @Marc-Andre Lafortune
Gibt es eine Möglichkeit erwähnt helfen, die Teil meiner Rails-Anwendung zu heraus ich brauche (zB Active Sachen nur) so es lädt nicht alles, um ein paar Tests zu machen? was diesen
rake test:recent
bin ich nicht sicher, wie die rspec Aufgabe mit diesem integrieren, aber man konnte auf jeden Fall den Test verwenden: recent Aufgabe als Vorlage das gleiche mit rspec-Tests, wenn das zu tun.
rake test:rspec:recent
existiert noch nicht
Es gibt ein neues Autotest-Tool für Ruby: Infinity-Test @ http://github.com/tomas-stefano/infinity_test – Jean
@Scott, was sende ich und warum? – rogerdpack
weil es die ganze environement lädt, lädt Armaturen und alle, die Jazz.
Der wahre Schuldige ist, wenn Sie es mit rake spec
laufen, it runs the db:test:prepare
task.
Mit dieser Task wird die gesamte Testdatenbank gelöscht und von Grund auf neu erstellt. Dies scheint mir lächerlich, aber das ist es, was es tut (das gleiche passiert, wenn Sie rake:test:units
etc. laufen lassen).
Sie können dies leicht umgehen mit der spec
Anwendung, die rspec als Teil der rspec Gem installiert.
So:
cd railsapp
spec speC# run all specs without rebuilding the whole damn database
spec spec/models # run model specs only
cd spec
spec controllers/user* # run specs for controllers that start with user
Durch das Löschen der DB und das erneute Erstellen wird sichergestellt, dass die Daten von den Fixtures korrekt geladen werden und keine Änderungen von vorherigen Läufen übrig bleiben. Running Spec direkt garantiert das nicht. Wenn du von der db abhängig sein willst, musst du sie von Grund auf neu erstellen, mock objects ftw! – Jean
Ich denke, die „Zen“ Erfahrung Sie suchen ist spec_server
und autospec
im Hintergrund laufen zu lassen, mit dem Ergebnis, nahezu sofortige Tests, wenn Sie eine Datei speichern.
Allerdings habe ich Probleme, diese beiden Programme zu kommunizieren.
fand ich eine Erklärung here:
Ich habe bemerkt, dass Autotest keine Befehle an die spec_server senden. Stattdessen wird die gesamte Rails-Umgebung und die Plugins der Anwendung bei jeder Ausführung neu geladen. Dies führt dazu, dass der Autotest deutlich langsamer ausgeführt wird als der Skriptserver, denn wenn Sie den Skript-/Spezifikationsbefehl ausführen, werden die Spezifikationen an den spec_server gesendet, der Ihre Rails-Umgebung bereits hochgefahren und betriebsbereit ist. Wenn Sie zufällig ein neues Plugin oder etwas ähnliches installieren, dann müssen Sie den spec_server neu starten.
Aber, wie beheben wir dieses Problem? Ich nehme an, es würde ZenTest herunterladen und den Code für das autotest
Programm ändern, aber ich habe keine Zeit es jetzt auszuprobieren.
Ab der Version rspec-rails-1.2.7 wird spec_server zugunsten des Spork gem veraltet.
Der Hauptgrund ist, dass erfordert für immer auf Windows, aus irgendeinem Grund.
Tipps für die Beschleunigung: Spork funktioniert jetzt mit Windows, glaube ich.
Sie können versuchen, "faster_require", welche Orte Caches:
http://github.com/rdp/faster_require
GL. -rp
Ich empfehle definitiv spork zu überprüfen.
Die railstutorial dies speziell an und gibt eine Abhilfe Spork in Schienen laufen 3.0 schön zu bekommen (ab diesem Moment ist Spork nicht Schienen 3 bereit, aus dem Kasten). Natürlich, wenn Sie nicht auf Schienen 3.0 sind, dann sollten Sie gut gehen.
Der Teil des Tutorials zeigt, wie in Schienen 3,0
http://railstutorial.org/chapters/static-pages#sec:spork
prüfen Spork zum Laufen zu bringen, wenn Spork ist Schienen 3.0 bereit
Spork hat super für mich gearbeitet, es hat Tests wieder Spaß gemacht. –
Es gibt nur ein Detail, das in Bezug auf Spork erwähnenswert ist: es läuft nicht unter Windows. – lampak
- 1. Warum ist PostgreSQL unter Windows so langsam?
- 2. Warum ist "htmlspecialchars" so langsam?
- 3. Warum ist array.min so langsam?
- 4. Warum ist TestComplete so langsam?
- 5. Warum ist statistics.mean() so langsam?
- 6. Warum ist PageSettings.PrintableArea so langsam?
- 7. Warum ist random.choice so langsam?
- 8. Warum ist rsync so langsam?
- 9. Warum ToDataURL ist so langsam?
- 10. Warum ist Dictionary.First() so langsam?
- 11. Rails-Anwendung Konfigurationszugriff langsam - warum?
- 12. Warum ist MySQL in Node.js so langsam?
- 13. Warum ist mein hgweb Server so langsam?
- 14. Warum ist Array.slice so (schockierend!) Langsam?
- 15. warum so langsam
- 16. Warum ist async so langsam zu erwarten?
- 17. Warum ist Adobe Luft so langsam
- 18. Warum Hypot() Funktion ist so langsam?
- 19. Warum Anruf über weak_ptr ist so langsam?
- 20. Warum ist PHP Composer so langsam?
- 21. Warum ist Scipys KDTree so langsam?
- 22. Warum ist der Wasserfall so langsam?
- 23. Warum ist dieses einfache Textanalyseprogramm so langsam?
- 24. elasticsearch Warum ist Facette so langsam?
- 25. Warum ist Selen RC so langsam?
- 26. Warum ist die Tk Leinwand so langsam?
- 27. Warum ist setColor so langsam auf Android
- 28. Warum der ember-cli so langsam ist
- 29. Warum ist dieser jQuery-Selektor so langsam?
- 30. warum ist C++ std :: max_element so langsam?
Um es klar zu sagen, würden Sie dann so etwas tun: spec --color ./spec -X –
spec_server ist jetzt zugunsten von spork veraltet. (http://github.com/timcharper/spork) – austinfromboston
https://github.com/sporkrb/spork - neue Quelle von Spork – ted