ИМХО основной замедляющей частью тестирования является конфигурация приборов по умолчанию.Если ваша конфигурация (в test/test_helper.rb
):
class ActiveSupport::TestCase
self.use_transactional_fixtures = false
self.pre_loaded_fixtures = false
self.use_instantiated_fixtures = true
, то перед каждым тестом метод ваша тестовая база данных очищается от старых данных, все таблицы заполняются, все записичитать в память.
Если вы измените настройки на противоположные:
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
self.pre_loaded_fixtures = true
self.use_instantiated_fixtures = false
, тогда база данных будет воссоздана только один раз для каждого тестового файла, и вы загрузите только те записи, которые вам действительно нужны вкаждый метод тестирования.
Это зависит от размера вашего набора данных тестирования, считаете ли вы приемлемым время создания тестовой базы данных.Когда у меня был довольно большой набор тестовых данных, я загружал приборы только один раз, перед всем набором тестов, но этот проект был (есть) в Rails 1, и я сильно изменил его, поэтому не могу сказать, как это сделатьв Rails 3 (по крайней мере, до тех пор, пока проблема не станет болезненной в каком-то новом проекте;).
Существует постоянное обсуждение вопроса о том, должны ли тесты попадать в базу данных или нет.Если вы считаете, что они должны (поскольку взаимодействие с базой данных также должно быть проверено), вы можете проверить, поможет ли вам просто установка этих параметров (или любой, кто читает эти ответы).