Препятствуйте тому, чтобы тест направляющих удалил данные семени

Термин краткий заголовок прибывает из газеты/издательского дела. Это - сокращенное название, это используется для идентификации происходящей истории. Люди заинтересовали семантикой URL, запущенной использовать короткий, сокращенный заголовок в их URL. Это также окупается на земле SEO, поскольку ключевые слова в URL добавляют важность для страницы.

Как ни странно, много веб-сайтов запустилось, помещают полный сериализированная с дефисами версия заголовков в их URL в строго целях SEO, что означает, что термин краткий заголовок больше вполне применяется. Это также терзает семантических пуристов, поскольку много реализаций просто прикрепляют эту сериализированную версию заголовка в конце их URL.

13
задан aaron 14 December 2009 в 03:40
поделиться

4 ответа

Тесты удаляют все данные из базы данных, а затем загружают ваши фикстуры (если они у вас есть).

Вам нужно, чтобы ваш помощник по тестированию загрузил исходный файл перед запуском тестов. Есть несколько способов сделать это, посмотрите мой аналогичный вопрос: Как автоматически загрузить данные db: seed в тестовую базу данных?

Самый простой способ - это, вероятно, просто добавить

require "# {Rails. root} /db/seeds.rb "

в начало файла test_helper.rb (при условии, что вы используете встроенную среду тестирования).

12
ответ дан 2 December 2019 в 00:03
поделиться

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

Однако заполнить базу данных вашими исходными данными действительно просто.

В вашем test_helper .rb файл добавить новый метод настройки в базовый класс ActionSupport :: TestCase .

class ActionSupport::TestCase < ...

  setup :load_seeds

  protected 

    def load_seeds
      load "#{Rails.root}/db/seeds.rb"
    end

end
4
ответ дан 2 December 2019 в 00:03
поделиться

Я вообще сомневаюсь в необходимости написания подобного теста. Проверяете ли вы, что задача сгребания исходных данных работает правильно, или вы хотите проверить поведение вашей реализации класса 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 или другого теста, связанного с задача.

0
ответ дан 2 December 2019 в 00:03
поделиться

Я согласен с 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 и создать массив имен файлов для обработки, я выбрал вышеуказанный процесса, поскольку я хотел иметь возможность указать, какой из множества существующих фикстур я хотел заполнить БД.

0
ответ дан 2 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: