Ich füge mehr rspec-Tests zu meiner App hinzu und möchte ein ScoringMethods-Modul testen, das sich in /lib/scoring_methods.rb befindet. Also habe ich ein Verzeichnis/spec/lib hinzugefügt und dort scoring_methods_spec.rb hinzugefügt. Ich erforderlich spec_helper und beschreiben Block als so ein:Das Hinzufügen von rspec Test für das Bibliotheksmodul scheint nicht aufzufliegen. Erwartungen und Matcher
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe ScoringMethods do
describe "should have scorePublicContest method" do
methods = ScoringMethods.instance_methods
methods[0].should match(/scorePublicContest/)
end
end
Jetzt methods[0]
ist ein String, und es gibt kein Problem, die öffentlichen Methode Namen mit dem regulären Ausdruck übereinstimmen. Und der relative Pfad zu "spec_helper" ist korrekt.
Das Problem ist, dass das gesamte Setup nicht scheint, die RSPEC-Bibliothek zu verwenden. Ausführen das Beispiel ergibt:
./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError)
...
Die gesamte Erwartung und Matcher Unterstützung scheint zu fehlen. Um meine Annahme zu testen, habe ich eine Arbeitshelfer-Spezifikation geändert, indem ich "is_instance_of" durch "is_foobar_of" ersetzt habe. Dieser Test schlägt einfach fehl und sagt "is_foobar_of" ist keine Methode des Zielobjekts; dass es die gesamte Spec :: Rails :: Example ... -Hierarchie nicht gibt.
Ich habe versucht, andere Matcher auch zu verwenden. Ich habe "be_instance_of" und einige andere ausprobiert. Es scheint, dass ich die rspec Bibliothek nicht richtig einschließe.
Schließlich ist ScoringMethods ein Modul, genau wie Helfer Module sind. Daher dachte ich, dass es möglich wäre, ein Modul zu testen (im Gegensatz zu Klassen wie Controllern und Modellen).
Ich würde Ihre Gedanken darüber, was ich falsch gemacht habe, sehr schätzen. Vielleicht gibt es einen effektiveren Weg, Bibliotheksmodule zu testen? Vielen Dank!
Mark, Vielen Dank für die Antwort. Du hast absolut recht! Ich hatte den "it" -Block nicht. Vielen Dank, Peter –
Auch, danke für Ihre Gedanken zum Testen von Modulen. Das Modul ist in einer Klasse enthalten, um nur seine öffentlichen Methoden verfügbar zu machen und keine große Liste von Methoden zu erhalten, die zurückgegeben werden, wenn der instance_methods-Aufruf verwendet wird. Auf diese Weise können wir dem Modul neue öffentliche Methoden hinzufügen, die in Dropdown-Listen und ähnlichem zur Auswahl stehen. Die Verwendung des gleichen Mechanismus, wie Sie vorschlagen, wird zum Testen hilfreich sein. –
Ehrfürchtig, hatte auch den 'it' Block nicht richtig geschlossen. –