#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Я пытаюсь настроить модульные тесты для своего приложения, но каждый раз, когда я пытаюсь запустить любой из своих модульных тестов, я получаю следующую ошибку при запуске теста в rubymine:
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
две разные ошибки!
Есть идеи, у кого я могу заставить работать мои модульные тесты?
Спасибо
p.s Я использую authlogic для аутентификации, не то чтобы я думал, что это имеет к этому какое-то отношение.
Ответ №1:
ActiveRecord::StatementInvalid
Запись выглядит как устаревшая тестовая база данных. Если вы не используете полную rake
, а не отдельную спецификацию, вам необходимо выполнить rake db:test:prepare
обновление таблиц базы данных в вашей среде тестирования. По сути, это просто будет соответствовать схеме базы данных разработки.
При запуске rake
вам не нужно этого делать, он автоматически делает это за вас, прежде чем начнет выполнять отдельные тесты.
Комментарии:
1. Я уже запустил
rake db:test:prepare
вызов, и он все еще выдает ту же ошибку. я даже пытался изменитьdatabase.yml
, чтобы разрешить тестам использовать базу данных разработки, и это выдает мне ту же ошибку.
Ответ №2:
У вас могут возникнуть проблемы с запуском модульных тестов напрямую, если вы не настроили свою среду для их поддержки, поскольку иногда интерпретатору Ruby не удается определить местоположение test_helper
. Самый надежный способ их запуска — это rake test:units
, и вы можете видеть командную строку, созданную для выполнения этого.
Первая ошибка может быть связана с наличием файла fixture без связанной таблицы в схеме, что в данном случае означает, что у вас может быть, test/fixtures/user_sessions.yml
но в user_sessions
таблице не определено db/schema.rb
. Для каждого теста загружаются приспособления, и первым шагом является удаление всех старых записей.
Комментарии:
1. Вы на чем-то настаиваете, это была проблема с креплениями! у меня нет таблицы user_sessions в базе данных. Я знаю, что это не входит в рамки вопроса, но если у вас есть немного времени и вы не возражаете, не могли бы вы, пожалуйста, включить немного информации о приборах и о том, как они влияют на тесты и для чего они существуют? Это помогло бы мне и, возможно, большему количеству людей с такой же проблемой лучше понять, что происходит. Спасибо
2. Любой
.yml
файл в каталоге fixtures загружается в связанную таблицу во время запуска модульного теста, но если таблица отсутствует, вы получаете эту специфическую ошибку. Rails действительно следует проверить, присутствует ли таблица, и вместо этого выдать предупреждение о недопустимом приспособлении. Приспособления используются для заполнения вашей тестовой базы данных любыми предопределенными записями, которые вам могут потребоваться, поэтому вам не нужно создавать их повторно во время тестирования.