アプリにさらに rspec テストを追加していて、/lib/scoring_methods.rb にある ScoringMethods モジュールをテストしたいと考えています。そこで、/spec/lib ディレクトリを追加し、そこに score_methods_spec.rb を追加しました。spec_helper が必要で、describe ブロックを次のように設定しました。
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
現在methods[0]
は文字列であり、パブリック メソッド名を正規表現と一致させることに問題はありません。そして、「spec_helper」への相対パスは正しいです。
問題は、セットアップ全体が rspec ライブラリを使用していないように見えることです。この例を実行すると、次の結果が得られます。
./spec/lib/scoring_methods_spec.rb:7: undefined method `match' for Spec::Rails::Example::RailsExampleGroup::Subclass_1::Subclass_1:Class (NoMethodError)
...
Expectation と Matcher のサポート全体が欠落しているようです。私の仮定をテストするために、「is_instance_of」を「is_foobar_of」に置き換えて、機能するヘルパー仕様を変更しました。そのテストは単純に失敗し、「is_foobar_of」は対象オブジェクトのメソッドではないと言います。つまり、この Spec::Rails::Example... 階層全体が存在しません。
他のマッチャーも使用してみました。「be_instance_of」などを試しました。rspec ライブラリを適切にインクルードしていないようです。
最後に、ScoringMethods はモジュールであり、ヘルパーがモジュールであるのとまったく同じです。そのため、(コントローラーやモデルなどのクラスとは対照的に) モジュールをテストすることが可能であると考えました。
私が間違ったことをしたことについて、あなたの考えを大いに感謝します。おそらく、ライブラリ モジュールをテストするより効果的な方法はありますか? ありがとう!