Mit dem hinzugefügten Generator von rspec-Rails ist es ziemlich einfach, RSpec zum Testen einer Rails-Anwendung einzurichten. Aber wie wäre es mit RSpec zum Testen eines Edelsteins in der Entwicklung? Ich benutze keinen Juwelier oder solche Werkzeuge. Ich habe gerade Bundler ( bundle gem my_gem
) verwendet, um die Struktur für das neue Juwel einzurichten und die * .gemspec manuell zu bearbeiten. Ich habe auch s.add_development_dependency "rspec", ">= 2.0.0"
zu gemspec hinzugefügt und a bundle install
.
Gibt es ein nettes Tutorial, was als nächstes zu tun ist, damit RSpec funktioniert?
Antworten:
Ich habe diese Antwort aktualisiert, um den aktuellen Best Practices zu entsprechen:
Bundler unterstützt die Edelsteinentwicklung perfekt. Wenn Sie ein Juwel erstellen, die nur Sie , was Sie brauchen in Ihrem Gemfile zu haben , ist folgendes:
Dies weist Bundler an, beim Ausführen in Ihrer gemspec-Datei nach den Abhängigkeiten zu suchen
bundle install
.Stellen Sie als Nächstes sicher, dass RSpec eine Entwicklungsabhängigkeit Ihres Edelsteins ist. Bearbeiten Sie die gemspec so, dass sie lautet:
Erstellen
spec/spec_helper.rb
und fügen Sie als Nächstes Folgendes hinzu:Die ersten beiden Zeilen weisen Bundler an, nur die Edelsteine in Ihre Edelsteinspezifikation zu laden. Wenn Sie Ihr eigenes Juwel auf Ihrem eigenen Computer installieren, werden Ihre Spezifikationen gezwungen, Ihren aktuellen Code zu verwenden, nicht die Version, die Sie separat installiert haben.
Erstellen Sie eine Spezifikation, zum Beispiel
spec/foobar_spec.rb
:Optional: Fügen Sie eine
.rspec
Datei für die Standardoptionen hinzu und fügen Sie sie in den Stammpfad Ihres Edelsteins ein:Schließlich: Führen Sie die Spezifikationen aus:
quelle
rspec --init
rspec --init
war nicht verfügbar, als ich das schrieb, aber guter Punkt!Iains obige Lösung funktioniert großartig!
Wenn Sie auch ein Rakefile möchten, ist dies alles, was Sie brauchen:
Überprüfen Sie das RDoc für RakeTask auf verschiedene Optionen, die Sie optional an die Aufgabendefinition übergeben können.
quelle
Sie können Ihren neuen Edelstein mit rspec generieren, indem Sie ausführen
bundler gem --test=rspec my_gem
. Kein zusätzliches Setup!Ich vergesse das immer. Es ist hier implementiert: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36
quelle
--test=rspec
, fragte mich aber trotzdem, ob ich Rspec beim Laufen verwenden wolltebundler gem my_gem
.Hier ist ein billiger und einfacher (wenn auch nicht offiziell empfohlener) Weg:
Machen Sie ein Verzeichnis in der Wurzel Ihres Edelsteins
spec
, geben Sie Ihre Spezifikationen dort ein. Sie haben wahrscheinlich bereits rspec installiert, aber wenn Sie dies nicht tun, machen Sie einfach einegem install rspec
und vergessen Sie Gemfiles und Bundler.Als Nächstes erstellen Sie eine Spezifikation und müssen angeben, wo sich Ihre App befindet, wo sich Ihre Dateien befinden und die zu testende Datei (zusammen mit den vorhandenen Abhängigkeiten) angeben:
Öffnen Sie das Terminal und führen Sie rspec aus:
Wenn Sie einige
.rspec
Optionen lieben möchten ,.rspec
erstellen Sie eine Datei und legen Sie sie im Stammpfad Ihres Edelsteins ab. Meins sieht so aus:Einfach, schnell, ordentlich!
Ich mag das, weil Sie Ihrem Projekt überhaupt keine Abhängigkeiten hinzufügen müssen und das Ganze sehr schnell bleibt.
bundle exec
verlangsamt die Dinge ein wenig, was Sie tun müssen, um sicherzustellen, dass Sie immer dieselbe Version von rspec verwenden. Die 0,56 Sekunden, die zum Ausführen von zwei Tests benötigt wurden, waren zu 99% belegt, als mein Computer zum Laden von rspec benötigte. Das Ausführen von Hunderten von Spezifikationen sollte extrem schnell sein. Das einzige Problem, auf das Sie stoßen könnten, ist, dass Sie möglicherweise einige Tests neu schreiben müssen, wenn Sie die Versionen von rspec ändern und die neue Version nicht abwärtskompatibel mit einer Funktion ist, die Sie in Ihrem Test verwendet haben.Dies ist hilfreich, wenn Sie einmalige Spezifikationen ausführen oder einen guten Grund haben, rspec NICHT in Ihre gemspec aufzunehmen. Es ist jedoch nicht sehr gut, um das Teilen zu ermöglichen oder die Kompatibilität zu erzwingen.
quelle
Thing = AwesomeGem::Awesome
oder Sie können den Test innerhalb eines Moduls durchführen, wiemodule AwesomeGem; it 'stuff' do; Awesome.new ... end; end