RAILS:加载所有全局灯具后运行一次代码

时间:2011-03-29 17:56:30

标签: ruby-on-rails rspec fixtures

在加载所有全局灯具之后,在运行任何测试/规格之前,我在哪里可以编写仅执行一次的代码

我在Rails 2.3.11上尝试使用rspec 1.3.1之前(:套件),这似乎在灯具之前执行。

2 个答案:

答案 0 :(得分:0)

rake任务(/ lib / tasks)怎么样?例如,我有一个(reset_db.rake)加载灯具,重置db等等:

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

答案 1 :(得分:0)

我遇到了同样的问题,但是仍然没有找到任何方法在加载灯具后连接一些代码......所以我使用了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