Термин краткий заголовок прибывает из газеты/издательского дела. Это - сокращенное название, это используется для идентификации происходящей истории. Люди заинтересовали семантикой URL, запущенной использовать короткий, сокращенный заголовок в их URL. Это также окупается на земле SEO, поскольку ключевые слова в URL добавляют важность для страницы.
Как ни странно, много веб-сайтов запустилось, помещают полный сериализированная с дефисами версия заголовков в их URL в строго целях SEO, что означает, что термин краткий заголовок больше вполне применяется. Это также терзает семантических пуристов, поскольку много реализаций просто прикрепляют эту сериализированную версию заголовка в конце их URL.
Тесты удаляют все данные из базы данных, а затем загружают ваши фикстуры (если они у вас есть).
Вам нужно, чтобы ваш помощник по тестированию загрузил исходный файл перед запуском тестов. Есть несколько способов сделать это, посмотрите мой аналогичный вопрос: Как автоматически загрузить данные db: seed в тестовую базу данных?
Самый простой способ - это, вероятно, просто добавить
require "# {Rails. root} /db/seeds.rb "
в начало файла test_helper.rb (при условии, что вы используете встроенную среду тестирования).
Функция «начального числа» не интегрирована в архитектуру тестирования. Тесты построены на основе фикстур, и каждый раз, когда вы запускаете набор тестов, Rails загружает данные из фикстур и заменяет существующий контент.
Однако заполнить базу данных вашими исходными данными действительно просто.
В вашем test_helper .rb файл добавить новый метод настройки в базовый класс ActionSupport :: TestCase
.
class ActionSupport::TestCase < ...
setup :load_seeds
protected
def load_seeds
load "#{Rails.root}/db/seeds.rb"
end
end
Я вообще сомневаюсь в необходимости написания подобного теста. Проверяете ли вы, что задача сгребания исходных данных работает правильно, или вы хотите проверить поведение вашей реализации класса State? Я предполагаю последнее, поэтому я бы написал тесты, которые сосредоточились на поведении и использовали Factory Girl (или аналогичный), поскольку вы упомянули, что не используете фикстуры. Обязательно удалите строку fixtures: all
из test / test_helper.rb
.
Чтобы добавить задачу в нормальный поток выполняемых тестов, это подход, который всегда у меня сработало:
namespace :test do
task :force_environment do
ENV['RAILS_ENV'] = 'test'
RAILS_ENV.replace('test')
end
end
%w(test:units test:functionals test:integration).map do |task_name|
task = Rake::Task[task_name]
task.clear_prerequisites
task.enhance %w(db:test:prepare test:force_environment db:seed)
end
Просто поместите это в файл с именем lib / tasks / testing.rake
, и он будет выбран при следующем запуске rake test
или другого теста, связанного с задача.
Я согласен с weppos относительно наилучшего способа сделать это, однако для полноты картины и ради людей, у которых уже могут быть файлы фикстур, вы можете выбрать другой подход и засеять свои база данных из существующих фикстур.
Для этого в файле db / seed.rb выполните что-то вроде следующего.
RAILS_FIXTURES = "#{Rails.root}/spec/fixtures"
models_loaded_from_fixtures = %w[Modela Modelb Modelc ....]
models_loaded_from_fixtures.each do |model|
Fixtures.create_fixtures(RAILS_FIXTURES, "#{model.tableize}")
puts "Loaded #{model.constantize.all.size} #{model.pluralize}"
end
Вы также можете прочитать каталог fixures и создать массив имен файлов для обработки, я выбрал вышеуказанный процесса, поскольку я хотел иметь возможность указать, какой из множества существующих фикстур я хотел заполнить БД.