Тесты не работают с MongoMapper в Sinatra

Я подключил MongoMapper к Sinatra, и все работает нормально, кроме тестирования. У меня есть Autotest с установленным Rack Testing и Rspec. Всякий раз, когда я запускаю автотест, он сообщает мне

/home/jason/ror/sbmongo/main.rb:11:in `<top (required)>': uninitialized constant 
MongoMapper (NameError)

Вот строка кода, на которую он ссылается в моем main.rb файле.

MongoMapper.database = 'testdb'

В чем проблема и как я могу это исправить?


person thank_you    schedule 19.01.2013    source источник
comment
Ага, у меня это есть в spec_helper.rb, но по-прежнему ничего.   -  person thank_you    schedule 20.01.2013
comment
Требуется ли spec_helper.rb перед main.rb в main_spec.rb файле?   -  person iain    schedule 20.01.2013
comment
Первое, что требуется в spec_helper, - это файл main.rb. Извините, если вы спрашивали не об этом, ваш вопрос меня сбивает.   -  person thank_you    schedule 21.01.2013
comment
Хорошо, это ответ на мой вопрос. Соглашение заключается в том, чтобы называть спецификации файлов / классов, добавляя к ним _spec, следовательно, main_spec.rb будет запускать спецификации для main.rb, и поскольку spec_helper требуется для всех спецификаций, но не для всех спецификаций требуются все файлы проекта, имеет смысл требовать файл main.rb в main_spec.rb, а не spec_helper (но это отдельная тема). По сути, вам необходимо иметь mongo_mapper до того, как потребуется main.rb (или до того, как какой-либо код MongoMapper будет вызван либо в main.rb, либо в спецификациях), что является наиболее вероятной причиной ошибки.   -  person iain    schedule 22.01.2013
comment
@iain, ага, вот и решение. require mongo_mapper был после того, как мне потребовался main.rb и т. Д. Опубликуйте его как ответ, и я дам вам кредит.   -  person thank_you    schedule 22.01.2013
comment
@ jason328 рад что исправил :)   -  person iain    schedule 22.01.2013


Ответы (1)


Порядок, в котором вещи вызываются через require в Ruby, действительно имеет значение, поскольку константа, объявленная в библиотеке, будет видна только после того, как библиотека будет востребована.

При запуске RSpec лучше всего поместить общий код настройки в одно место - файл spec_helper.rb, а затем в отдельные спецификации (например, при спецификации main.rb) require 'spec_helper и затем require main.rb. Если для каждого файла кода требуются библиотеки в правильном порядке, ваши спецификации тоже будут работать без проблем. Если нет, это признак того, что порядок requires неправильный.

person iain    schedule 22.01.2013