Объекты не отображаются в тестовой базе данных при выполнении спецификаций

При сохранении объекта путем вызова Entity.create(:name => "Entity1") из консоли Rails в тестовой среде (RAILS_ENV=test rails console) объект "Entity1" правильно отображается в тестовой базе данных (MySQL) при проверке его с помощью клиента mysql. Но когда вы делаете то же самое в файле rspec (entity.create(:name => "Entity1"); sleep 100) и проверяете тестовую базу данных во время функции сна, она оказывается совершенно пустой. Почему так? Где сохраненная запись? (Мне это нужно в то время в базе данных из-за некоторого тестирования Sphinx.)

Я просто хотел бы добавить, что запрос созданной сущности в спецификации работает нормально (даже если она не отображается в клиенте базы данных). Так что кажется, что Rails делает здесь какие-то чудесные вещи, которые я действительно не понимаю.

Еще более странно (по крайней мере для меня ;-)) ... при выполнении Entity.connection.commit_db_transaction() после создания объекта запись внезапно появляется в базе данных (но больше не очищается автоматически).


person Zardoz    schedule 04.10.2010    source источник


Ответы (1)


Решением этой проблемы является функция Rails (или RSpec... не уверен в этом) под названием Transactional Fixtures. При отключении этого в spec_helper.rb config.use_transactional_fixtures = false все записи внезапно появляются в базе данных после создания объектов (но это может привести к снижению производительности теста).

person Zardoz    schedule 04.10.2010