Я добавляю больше тестов rspec в свое приложение и хотел бы протестировать модуль ScoringMethods, который находится в /lib/scoring_methods.rb. Поэтому я добавил каталог / spec / lib и добавил туда scoring_methods_spec.rb. Я потребовал spec_helper и настроил блок описаний так:
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 - это модуль, точно так же, как помощники - это модули. Поэтому я подумал, что можно будет протестировать модуль (в отличие от классов, таких как контроллеры и модели).
Буду очень признателен за ваши мысли о том, что я сделал неправильно. Возможно, есть более эффективный способ тестирования библиотечных модулей? Спасибо!