RAILS: запуск кода один раз после загрузки всех глобальных светильников - PullRequest
2 голосов
/ 29 марта 2011

Где я могу написать код, который будет выполняться только один раз после загрузки всех глобальных фикстур, и перед запуском любых тестов / спецификаций

Я пробовал раньше (: suite) с rspec 1.3.1 на Rails 2.3.11и это, кажется, выполняется до фикстур.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я столкнулся с той же проблемой, но все еще не нашел способа подключить некоторый код после загрузки фикстур ... поэтому я использовал решение SpyrosP. Однако проблема этого способа заключается в том, что вы больше не можете пользоваться помощниками доступа к приборам, поскольку вы загружаете свои приборы не из конфига rspec, а из задачи rake.

Так что в основном вам нужно воссоздать этих помощников (код немного грязный, но, кажется, работает для меня:

  #spec_helper.rb 

  module CustomAccessors
    # Remplacement de fixtures :all
    %w{yml csv}.each do |format|
      paths =  Dir.
        glob(::Rails.root.join("spec/fixtures/*.#{format}")).
        map! { |path| path.match(/\/([^\.\/]*)\./)[1] }

      paths.each do |path|
        define_method path do |*args|
          path.singularize.camelcase.constantize.find(ActiveRecord::Fixtures.identify(args[0]))
        end
      end
    end
  end

  RSpec.configure do |config|
    #config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.include(CustomAccessors)
  end
0 голосов
/ 29 марта 2011

Как насчет граблей (/ lib / tasks)?Например, у меня есть один (reset_db.rake), который загружает приборы, сбрасывает БД и многое другое:

namespace :db do
  desc "Drop, create, migrate, seed the database and prepare the test database for rspec"
  task :reset_db => :environment do
    Rake::Task['db:drop'].invoke
    Rake::Task['db:create'].invoke
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:fixtures:load'].invoke
    Rake::Task['db:test:prepare'].invoke
  end
end
...