2011-05-04 2 views
2

Я пытаюсь настроить мои модульные тесты для моего приложения, но любое времени я пытаюсь запустить любого из моих модульных тестов я получаю ошибку follwoing когда я запустить тест в RubyMine:Rails 3: Тестирование модулей не выполняется?

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'cms2_test.user_sessions' doesn't exist: DELETE FROM `user_sessions` 
1 tests, 0 assertions, 0 failures, 1 errors 
Test suite finished: 0.016993 seconds 

и вот ошибка я получаю, когда я пытаюсь запустить тест в консоли:

ruby unit/user_test.rb 
/Users/aldeirm2/Desktop/CMS2/config/boot.rb:1:in `require': no such file to load -- rubygems (LoadError) 
    from /Users/aldeirm2/Desktop/CMS2/config/boot.rb:1 
    from /Users/aldeirm2/Desktop/CMS2/config/application.rb:1:in `require' 
    from /Users/aldeirm2/Desktop/CMS2/config/application.rb:1 
    from /Users/aldeirm2/Desktop/CMS2/config/environment.rb:2:in `require' 
    from /Users/aldeirm2/Desktop/CMS2/config/environment.rb:2 
    from ./test_helper.rb:2:in `require' 
    from ./test_helper.rb:2 
    from unit/user_test.rb:1:in `require' 
    from unit 

/user_test.rb:1

два diffrent ошибки!

ЛЮБЫЕ идеи, которые я могу получить, чтобы мои модульные тесты работали?

Благодаря

p.s Я использую authlogic для authentcation не то, что я думаю, что это не имеет ничего общего с ним.

ответ

0

У вас могут возникнуть проблемы с запуском модульных тестов напрямую, если вы не настроили среду для ее поддержки, поскольку иногда интерпретатор Ruby имеет проблемы с разрешением местоположения test_helper. Самый надежный способ их запуска - rake test:units, и вы можете увидеть построенную для выполнения командную строку.

Первая ошибка может быть связан с имея арматуру файл без соответствующей таблицы в схеме, которая в данном случае означает, что вы можете иметь test/fixtures/user_sessions.yml но не user_sessions таблицу, определенных в db/schema.rb. Светильники загружаются для каждого теста, и первым шагом является удаление всех старых записей.

+0

Вы находитесь на чем-то, проблема была решена! Я не имею таблицу user_sessions в базе данных. Я знаю, что это не касается вопроса, но если у вас есть немного времени и не возражаете, можете ли вы включить немного информации о светильниках и как они влияют на тесты и на что они там нужны? Это помогло бы мне и, возможно, большему числу людей с той же проблемой понять, что происходит лучше. Спасибо –

+1

Любой файл '.yml' в каталоге приборов загружается в связанную таблицу во время запуска единичного теста, но если таблица отсутствует, вы получаете эту странную ошибку. Рельсы действительно должны проверять, присутствует ли таблица, и вместо этого выводить предупреждение о недопустимом приборе. Светильники используются для заполнения вашей тестовой базы данных любыми заранее определенными записями, которые могут потребоваться, поэтому вам не нужно создавать их повторно во время тестирования. – tadman

+0

Делает большой смысл сейчас, спасибо! –

2

Запись ActiveRecord::StatementInvalid кажется устаревшей тестовой базой данных. Если вы не используете полный rake, а не запускаете отдельную спецификацию, вам нужно запустить rake db:test:prepare, чтобы обновить таблицы базы данных в тестовой среде. Это, в основном, будет соответствовать схеме базы данных разработки.

При запуске rake вам не нужно это делать, оно автоматически сделает это за вас до того, как оно запустит отдельные тесты.

+0

Я уже запускал вызов '' rake db: test: prepare'' и его по-прежнему выдавал ту же ошибку. Я даже попытался изменить '' database.yml'', чтобы тесты могли использовать базу данных разработки, и это дает мне ту же ошибку. –

Смежные вопросы